wake-up-neo.com

Wie erzeugt Entity Framework eine GUID für einen Primärschlüsselwert?

Wenn wir die ASP.NET-Anwendung ausführen und den Benutzer registrieren, legt Entity Framework die eindeutige ID (PK) in der AspNetUser-Tabelle automatisch fest:

 enter image description here

Dasselbe gilt für andere AspNetRoles, AspNetUserLogins und AspNetUserRoles Nur bei AspNetUserClaims ist Identität aktiviert.

Kann jemand erklären, wie das Entity Framework diese eindeutige ID erstellt? Und wenn wir eine eigene Tabelle mit deaktivierter Identität in EF erstellen möchten, wie werden wir diese Art von ID für den Primärschlüssel generieren?

6
Shivam Sharma

Die GUID wird weder von Entity Framework noch von SQL generiert. Es wird von Identity Framework gehandhabt. Navigiere einfach zu IdentityModels.cs

public class ApplicationUser : IdentityUser
{
   // ...
}

Diese Klasse wird von Microsoft.AspNet.Identity.EntityFramework.IdentityUser geerbt und der Konstruktor für diese Klasse ist definiert als ( Source )

public IdentityUser()
{
    Id = Guid.NewGuid().ToString();
}

GUID wird also im Konstruktor generiert. Dies gilt auch für andere Identity-Tabellen. 

Hinweis: Das Id-Feld befindet sich in der Datenbank varchar (string).

6

Diese eindeutige ID wird beim Einfügen von SQL Server erstellt.

Wenn Sie möchten, dass SQL Server den Wert beim Einfügen generiert, müssen Sie die folgenden Attribute in Ihrem Modell verwenden:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }

Oder wenn Sie die ID selbst verwalten möchten, generieren Sie sie einfach:

var id = Guid.NewGuid();
20
PMerlet

EF generiert diesen Wert nicht. Dies ist ein Wert von GUID (uniqueidentifier in T-SQL), der von SQL Server automatisch generiert wird, wenn eine neue Zeile eingefügt wird.

3
Dai

Bei Verwendung von Identity in ASP .NET wird die ID automatisch in db (uniqueidentifier-Datentyp) generiert. In C # können Sie GUID mit der Methode Guid.NewGuid() generieren.

Eine GUID ist eine 128-Bit-Ganzzahl (16 Byte), die auf allen Computern und Netzwerken verwendet werden kann, wenn eine eindeutige Kennung erforderlich ist. Ein solcher Identifikator hat eine sehr geringe Wahrscheinlichkeit, dass er dupliziert wird.

Hier finden Sie C # und T-SQL

2
M. Wiśnicki

Ich denke, das ist mehr eine Funktion von SQL-Server als von EF direkt. EF erstellt die Tabelle mit einem eindeutigen ID-Feld mit der Identität auf . Wenn Sie dies selbst tun möchten, benötigen Sie ein eindeutiges ID-Feld. Ihr Objekt sollte dann eine GUIDproperty Id haben, die Sie Guid.NewGuid() für die Instanz zuweisen.

Hoffentlich hilft das

0
K. Berger

in EF Core und Poco:

...
.Property(p => p.Id)
    .ValueGeneratedOnAdd()
;
0
Omid-RH