我想在asp.net web api应用程序中使用 System.Guid 类型作为我所有表的id。但我也使用Asp.net Identity,它使用 string -type id(也用于存储guid)。所以我想知道为什么它默认使用 string id而不是 System.Guid ?什么是通过所有应用程序使用的更好选择 - Guid id或 string -guid id?在使用字符串的情况下 - 在代码或数据库中生成新id的最正确和最可靠的方法是什么?
答案 0 :(得分:6)
使用ASP.NET Core,您可以通过一种非常简单的方式为Identity的模型指定所需的数据类型。
第一步,覆盖<中的身份类字符串> 到<您想要的数据类型> :
public class ApplicationUser : IdentityUser<Guid>
{
}
public class ApplicationRole : IdentityRole<Guid>
{
}
使用您想要的类和数据类型声明您的数据库上下文:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
}
在您的启动类中,使用您的模型声明身份服务并声明主键所需的数据类型:
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext, Guid>()
.AddDefaultTokenProviders();
答案 1 :(得分:1)
根据您使用的ASP.Net身份验证版本,ASP.NET Identity v2应该在webpages_Membership
表中将其存储为uniqueidentifier(Guid)。在更多先前版本中,它将用户id存储为1,Sunday,2,Monday,3,Tuesday,4,Wednesday,5,Thursday,6,Friday,7,Saturday
表中的int。
我相信它将它表现为一个字符串,因此它可以是您喜欢的任何数据类型,然后可以根据需要在您的代码中进行转换。