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:
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?
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.
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();
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.
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é.
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 GUID
propriation Id
, à laquelle vous affectez Guid.NewGuid()
for instance.
J'espère que cela pourra aider