当我们运行ASP.NET应用程序并注册用户时,Entity Framework会自动在AspNetUser表中设置唯一ID(PK):
其他AspNetRoles,AspNetUserLogins,AspNetUserRoles也是如此 除了已启用标识的AspNetUserClaims。
任何人都可以解释实体框架如何创建这个唯一的ID吗?如果我们想要在EF中创建我们自己的表格并禁用身份,那么我们如何为主键生成这种Id?
答案 0 :(得分:21)
此唯一ID由SQL Server在插入时创建。
如果要让SQL Server在插入时生成值,则必须在模型中使用以下属性:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }
或者,如果您想自己管理Id,只需生成它:
var id = Guid.NewGuid();
答案 1 :(得分:6)
GUID不是由Entity Framework
生成,也不是由SQL
生成的。它由身份框架处理。只需导航到IdentityModels.cs
public class ApplicationUser : IdentityUser
{
// ...
}
此类继承自Microsoft.AspNet.Identity.EntityFramework.IdentityUser
,此类的构造函数定义为(Source)
public IdentityUser()
{
Id = Guid.NewGuid().ToString();
}
因此GUID在构造函数中生成。对于其他Identity表也是如此。
注意:数据库中的Id字段为varchar (string)
。
答案 2 :(得分:3)
EF并没有产生这个价值。这是一个GUID(T-SQL中为uniqueidentifier
)值,当一个新行被INSERT时,由SQL Server自动生成。
答案 3 :(得分:2)
在ASP .NET中使用Identity
,id在db(uniqueidentifier数据类型)中自动生成。在C#中,您可以使用方法Guid.NewGuid()
GUID是一个128位整数(16字节),可以在需要唯一标识符的所有计算机和网络中使用。这样的标识符被复制的可能性非常低。
答案 4 :(得分:0)
我认为这是SQL-Server的一个特性,而不是EF的特性。 EF使用带有标识的唯一ID字段创建表。
如果你想自己做,你需要一个唯一的id字段。然后,您的对象应具有public class CustomUserNameValidator : UserNamePasswordValidator
{
public static int IsSuccess = 0;
public static int UserId=0;
public override void Validate(string userName, string password)
{
this.IsValidate(username,password);
}
private int isValidate(string stUserName, string password)
{
try
{
LoginUser objUser=DBContext.ValidateUser(stUserName,password);
if(objUser!=null)
{
UserId=objUser.UserId;
IsSuccess=1;
}
}
Catch(Exception ex)
{
Logger.Log(ex);
}
}
}
属性GUID
,例如您指定Id
。
希望有所帮助
答案 5 :(得分:0)
在EF core和poco中:
...
.Property(p => p.Id)
.ValueGeneratedOnAdd()
;