6

Sto cercando di capire perché le nuove tabelle ASP.NET Identità smesso di usare Guid (uniqueidentifier tipo) come tasti - invece sta ora utilizzando nvarchar(128) ma ancora mantenere un Guid come string ...Perché le nuove tabelle Identity ASP.NET smettono di utilizzare Guid (tipo uniqueidentifier) ​​come chiavi?

Non è è un enorme spreco? (uniqueidentifier è a soli 2 integers vs tutta Guid come un 36 carattere string)

Sono sospettare che Entity Framework potrebbe essere responsabile di questo ...

E 'sicuro di tornare ai tasti uniqueidentifier?

Qualcuno può dirmi quali sono i vantaggi dell'utilizzo di stringhe di 36 caratteri?

+0

'uniqueidentifier' è 16 byte, non 8. E la dimensione della stringa non dipende dalla sua lunghezza, quindi in realtà sono sempre gli interi 256 byte (nvarchar ha due byte per" carattere "), e lo stesso per eventuali indici e associazioni. Immagino che l'obiettivo sia la flessibilità, ma mi sembra un compromesso per me ... – Luaan

+0

Grazie, per qualche motivo ho avuto Guid = 2 int bloccato nella mia testa ... ma penso che il nuovo server SQL allochi solo il numero di caratteri nvarchar che vengono utilizzati e non spendere tutti i 128 se solo 36 sono usati - ma ancora un grande spreco ... – Yovav

+0

So che lo fa con 'nvarchar (max)' (e anche allora c'è una lunghezza minima IIRC) e simili, non ho esplorato come funziona esattamente diversamente. È possibile che abbiano risolto tutti questi problemi, ma non dovremmo semplicemente usare 'nvarchar (max)' ovunque? : D – Luaan

risposta

1

L'identità è progettata per funzionare su più piattaforme di storage e non tutte le piattaforme di storage hanno Guid come tipo di archiviazione supportato.

È possibile modificare il pkey di stringa predefinito in Guid, ma ciò comporta del lavoro sui modelli C#. O puoi cambiare la chiave in un int - qualunque cosa tu voglia. Basta essere consapevoli che c'è un enorme debate su which è better.

+0

Grazie. Mi chiedo se ci siano più motivi validi per usare 128 nvarchar oltre a supportare altre piattaforme SQL ... Ero un grande fan di Entity Framework ma sembra che si stiano muovendo troppo velocemente e non chiudendo tutte le estremità a destra ... questo il tipo di impatto sulle prestazioni è inaccettabile ... – Yovav

+0

Bene, EF potrebbe emulare GUID su tali piattaforme, ma perché farlo così ovunque? Sembra una delle cose che dovrebbero essere gestite dall'astrazione che l'EF fornisce. – Luaan

+0

@Luaan Cosa intendi con "fai così dappertutto"? Se crei una proprietà 'Guid' nella tua classe di memoria e comunichi a EF di lavorarci, creerà un campo' UNIQUEIDENTIFIER' in SQL Server. Memorizzare Guid come stringa è una scelta del framework Identity. – trailmax

Problemi correlati