12

Desidero utilizzare System.Guid tipo come ID per tutte le mie tabelle in asp.net web api application. Ma uso anche Asp.net Identity, che usa una stringa (per memorizzare anche i guids). Quindi mi chiedo perché sta usando stringa invece di System.Guid per impostazione predefinita? E qual è la scelta migliore da utilizzare attraverso tutta l'applicazione - Guid id o stringa -guid id? In caso di utilizzo di stringhe - qual è il modo più corretto e affidabile per generare un nuovo codice id o nel database?Perché l'ID utente identità di asp.net è una stringa?

+0

Il "perché" è spiegato [qui] (http://stackoverflow.com/q/19238621/304683) - entrambe le risposte a quel post sarà davvero aiutare. Hth. – EdSF

+0

Grazie a @EdSF, ma ho ancora una domanda aperta su quale sia il modo migliore per organizzare l'applicazione - guid stringhe o Guids (uniqueidentifier) ​​per l'id? – Ostap

+0

Dipende dai tuoi requisiti. Vedere la [risposta di Rick Anderson (MSFT)] (http://stackoverflow.com/a/24152085/304683) per l'orientamento. – EdSF

risposta

0

A seconda della versione dell'autenticazione ASP.Net che si sta utilizzando, nel database ASP.NET Identity v2 deve essere memorizzata come identificatore univoco (Guid) nella tabella AspNetUsers. Nelle versioni precedenti memorizzerà l'id utente come int nella tabella webpages_Membership.

Credo che lo sollevi come una stringa in modo che possa essere qualsiasi tipo di dati che ti piace sotto il cofano e questo può quindi essere lanciato nel codice come richiesto.

+0

Ciao Tim, sto usando l'ultima versione del sistema di appartenenza per ASP.NET - Identità ASP.NET. Non sono ancora sicuro, qual è la procedura migliore per utilizzare la stringa per tutte le tabelle nel mio database o convertire tutto in GUID? – Ostap

+0

@ user3460585 int vs Guids sono argomenti antichissimi. Vedere queste risposte: http://dba.stackexchange.com/a/266/6868 http://blog.codinghorror.com/primary-keys-ids-versus-guids/ http://programmers.stackexchange.com/a/189031/86760 – trailmax

+0

Scusa, non avevo capito che stavi chiedendo il tuo database. Generalmente ciò che facciamo è archiviare il nome utente su un record Utente nel nostro database, che possiamo quindi fare riferimento al record ASP.Net, che si stacca anche dal livello di appartenenza sottostante. – Tim

5

Con ASP.NET Core, si dispone di un modo molto semplice per specificare il tipo di dati desiderato per i modelli di Identity.

Primo passo, le classi di sostituzione di identità da < string> a dati < tipo che si desidera>:

public class ApplicationUser : IdentityUser<Guid> 
{ 
} 

public class ApplicationRole : IdentityRole<Guid> 
{ 
} 

dichiarare il vostro contesto del database, utilizzando le classi e il tipo di dati che si desidera:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid> 
    { 
     public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
      : base(options) 
     { 
     } 

     protected override void OnModelCreating(ModelBuilder builder) 
     { 
      base.OnModelCreating(builder); 
      // Customize the ASP.NET Identity model and override the defaults if needed. 
      // For example, you can rename the ASP.NET Identity table names and more. 
      // Add your customizations after calling base.OnModelCreating(builder); 
     } 
    } 

E nella classe di avvio, dichiarare il servizio di identità utilizzando i modelli e dichiarare il tipo di dati desiderato per il prim Tasti ary:

services.AddIdentity<ApplicationUser, ApplicationRole>() 
      .AddEntityFrameworkStores<ApplicationDbContext, Guid>() 
      .AddDefaultTokenProviders(); 
+1

Per informazioni, c'è un argomento su questo nella documentazione ufficiale ora: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-primary-key-configuration – AdrienTorris

Problemi correlati