Entity Framework如何为主键值生成GUID?

Shi*_*rma 8 c# sql-server asp.net asp.net-mvc entity-framework

当我们运行ASP.NET应用程序并注册用户时,Entity Framework会自动在AspNetUser表中设置唯一ID(PK):

在此输入图像描述

除了已启用标识的AspNetUserClaims之外,其他AspNetRoles,AspNetUserLogins,AspNetUserRoles也是如此.

任何人都可以解释实体框架如何创建这个唯一的ID吗?如果我们想要在EF中创建我们自己的表,并禁用身份,我们将如何为主键生成这种Id?

PMe*_*let 23

此唯一ID由SQL Server在插入时创建.

如果要让SQL Server在插入时生成值,则必须在模型中使用以下属性:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

或者,如果您想自己管理Id,只需生成它:

var id = Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)


Muj*_*han 7

GUID Entity Framework既不是由生成也不是由生成SQL.它由Identity框架处理.只需导航到IdentityModels.cs

public class ApplicationUser : IdentityUser
{
   // ...
}
Run Code Online (Sandbox Code Playgroud)

此类继承自Microsoft.AspNet.Identity.EntityFramework.IdentityUser此类的构造函数,定义为(Source)

public IdentityUser()
{
    Id = Guid.NewGuid().ToString();
}
Run Code Online (Sandbox Code Playgroud)

因此GUID是在构造函数中生成的.对于其他Identity表也是如此.

注意:Id Field varchar (string)位于数据库中.