我想在ASP.NET Web API应用程序的所有表中使用 System.Guid 类型作为标识。但是,我还使用Asp.net Identity,它使用字符串类型的标识(也可以存储GUID)。所以,我想知道为什么默认情况下使用字符串 ID,而不是System.Guid?在整个应用程序中使用Guid ID还是字符串-GUID ID更好?如果使用字符串,生成新ID的最适当和可靠的方式是在代码中还是在数据库中?
我想在ASP.NET Web API应用程序的所有表中使用 System.Guid 类型作为标识。但是,我还使用Asp.net Identity,它使用字符串类型的标识(也可以存储GUID)。所以,我想知道为什么默认情况下使用字符串 ID,而不是System.Guid?在整个应用程序中使用Guid ID还是字符串-GUID ID更好?如果使用字符串,生成新ID的最适当和可靠的方式是在代码中还是在数据库中?
使用ASP.NET Core,您可以非常简单地指定Identity模型所需的数据类型。
第一步,将Identity类从< string>覆盖为< 您想要的数据类型>:
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();
AspNetUsers
表中。在更早的版本中,它将用户ID存储为webpages_Membership
表中的int类型。我认为它将其呈现为字符串,因此在幕后可以是任何数据类型,并且可以根据需要在代码中进行转换。