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?
risposta
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.
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
@ 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
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
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();
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
Il "perché" è spiegato [qui] (http://stackoverflow.com/q/19238621/304683) - entrambe le risposte a quel post sarà davvero aiutare. Hth. – EdSF
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
Dipende dai tuoi requisiti. Vedere la [risposta di Rick Anderson (MSFT)] (http://stackoverflow.com/a/24152085/304683) per l'orientamento. – EdSF