繁体   English   中英

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

[英]How does Entity Framework generate a GUID for a primary key value?

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

在此处输入图片说明

对于其他 AspNetRoles、AspNetUserLogins、AspNetUserRoles 也是如此,除了启用了身份的 AspNetUserClaims。

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

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

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

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

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

var id = Guid.NewGuid();

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

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

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

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

所以GUID是在构造函数中生成的。 这对于其他身份表也是一样的。

注意:Id 字段是数据库中的varchar (string)

EF 没有产生那个价值。 这是一个 GUID(T-SQL 中的uniqueidentifier )值,它是在插入新行时由 SQL Server 自动生成的。

在 ASP .NET 中使用Identity ,在 db 中自动生成 id(唯一标识符数据类型)。 在 C# 中,您可以使用Guid.NewGuid()方法生成 GUID

GUID 是一个 128 位整数(16 字节),可用于所有需要唯一标识符的计算机和网络。 这样的标识符被复制的可能性非常低。

在这里你可以找到C#T-SQL

在 EF 核心和 poco 中:

...
.Property(p => p.Id)
    .ValueGeneratedOnAdd()
;

我认为这更像是 SQL-Server 的一个特性,而不是 EF 的直接特性。 EF 创建具有唯一 ID 字段且标识打开的表。 如果你想自己做,你需要一个 unique-id 字段。 然后您的对象应该有一个GUID属性Id ,例如您分配Guid.NewGuid()

希望有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM