web-dev-qa-db-fra.com

Comment Entity Framework génère-t-il GUID pour une valeur de clé primaire?

Lorsque nous exécutons l'application ASP.NET et enregistrons l'utilisateur, Entity Framework définit automatiquement l'identifiant unique (PK) dans la table AspNetUser:

 enter image description here

Il en va de même pour les autres AspNetRoles, AspNetUserLogins, AspNetUserRoles , Sauf AspNetUserClaims pour lequel l'identité est activée.

Quelqu'un peut-il expliquer comment Entity Framework crée cet identifiant unique? Et si nous voulons créer notre propre table avec une identité désactivée dans EF, comment allons-nous générer ce type d'identifiant pour la clé primaire?

6
Shivam Sharma

Le GUID n'est pas généré par Entity Framework ni par SQL. Il est géré par Identity framework. Il suffit de naviguer vers IdentityModels.cs

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

Cette classe est héritée de Microsoft.AspNet.Identity.EntityFramework.IdentityUser et le constructeur de cette classe est défini comme ( Source )

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

Donc, GUID est généré dans le constructeur. C'est la même chose pour les autres tables d'identité. 

Remarque: Le champ Id est varchar (string) dans la base de données.

6
Mujahid Daud Khan

Cet identifiant unique est créé par SQL Server lors de l'insertion.

Si vous souhaitez laisser SQL Server générer la valeur lors de l'insertion, vous devez utiliser les attributs suivants dans votre modèle:

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

Ou si vous souhaitez gérer vous-même l'identifiant, générez-le simplement:

var id = Guid.NewGuid();
20
PMerlet

EF ne génère pas cette valeur. Il s’agit d’une valeur GUID (uniqueidentifier dans T-SQL) générée automatiquement par SQL Server lorsqu’une nouvelle ligne est INSERTed.

3
Dai

En utilisant Identity dans ASP .NET, les id sont générés automatiquement dans la base de données (type de données uniqueidentifier). En C #, vous pouvez générer GUID à l'aide de la méthode Guid.NewGuid()

Un GUID est un entier de 128 bits (16 octets) qui peut être utilisé sur tous les ordinateurs et tous les réseaux lorsqu'un identifiant unique est requis. Un tel identifiant a une très faible probabilité d'être dupliqué.

Ici vous trouvez C # et T-SQL

2
M. Wiśnicki

Je pense que ceci est plus une fonctionnalité de SQL-Server, que de EF directement. EF crée la table avec un champ d'identifiant unique avec identité sur . Si vous souhaitez le faire vous-même, vous avez besoin d'un champ d'identifiant unique. Votre objet devrait alors avoir une GUIDpropriation Id, à laquelle vous affectez Guid.NewGuid()for instance.

J'espère que cela pourra aider

0
K. Berger