我在ASP.NET Core 1.1中创建了一个新的Web应用程序,ASP.NET身份3的默认模板带有nvarchar(400)
或字符串作为" ID"字段的默认数据类型。
我已经将默认的 TKey
类型从 nvarchar(400)
更改为 Uniqueidentifier
,是否有任何方法可以使用默认代码第一个方法更改ASP.NET身份中的默认DBO.ASPNETXXX tables?
我在这里的评论中找到了答案,我想在这里分享更多的组织,这要归功于" Raffaele Garofalo"的回答,我已经复制了答案并添加了我的2个美分:
要重命名asp.net identity 3
中的默认表并将数据类型更改为Uniqueidentifier
,请使用以下步骤:
在applicationdbcontext.cs中:
更改ApplicationDbContext或您用来反映这一点的任何内容:
将类更改为:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
和OnModelCreating
方法为:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customizations
builder.Entity<ApplicationUser>(i =>
{
i.ToTable("Users");
i.HasKey(x => x.Id);
});
builder.Entity<ApplicationRole>(i =>
{
i.ToTable("Roles");
i.HasKey(x => x.Id);
});
builder.Entity<IdentityUserRole<Guid>>(i =>
{
i.ToTable("UserRoles");
i.HasKey(x => new { x.RoleId, x.UserId });
});
builder.Entity<IdentityUserLogin<Guid>>(i =>
{
i.ToTable("UserLogins");
i.HasKey(x => new { x.ProviderKey, x.LoginProvider });
});
builder.Entity<IdentityRoleClaim<Guid>>(i =>
{
i.ToTable("RoleClaims");
i.HasKey(x => x.Id);
});
builder.Entity<IdentityUserClaim<Guid>>(i =>
{
i.ToTable("UserClaims");
i.HasKey(x => x.Id);
});
builder.Entity<IdentityUserToken<Guid>>(i =>
{
i.ToTable("UserTokens");
i.HasKey(x => x.UserId);
});
}
添加用户和角色ID的默认GUID值:
builder.Entity<ApplicationUser>(b =>
{
b.Property(u => u.Id).HasDefaultValueSql("NEWID()");
});
builder.Entity<ApplicationRole>(b =>
{
b.Property(u => u.Id).HasDefaultValueSql("NEWID()");
});
我刚刚从名称中删除了Aspnet扩展名,您可以添加自定义表名。并且您可以用Guid
替换int
,用于整数ID
在applicationuser.cs中,我创建了一个自定义应用程序类别类
public class ApplicationUser : IdentityUser<Guid>
{
}
和自定义应用程序类
public class ApplicationRole : IdentityRole<Guid>
{
}
在ConfigureServices
方法下的startup.cs中
更改您的ASP.NET核心启动:
services
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services
.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext, Guid>()
.AddDefaultTokenProviders();
删除数据/迁移文件夹中的内容,但将迁移文件夹保留在此处。
现在在命令行(CMD(中,将目录更改为应用程序根:
CD X:ApplicationPathHere
如果存在,请删除现有的DB,因为该架构不能从PK字符串迁移到PK GUID
dotnet ef database drop -c ApplicationDbContext
创建初始迁移
dotnet ef migrations add InitialCreate -c ApplicationDbContext
创建数据库
dotnet ef database update
更新对于.NET Core 2.0 MVC项目模板,
您可能会在ManageController
中遇到一些错误,只需添加.ToString()
,无需通过INT或GUID:
.AddEntityFrameworkStores<ApplicationDbContext, Guid>()
只是添加
.AddEntityFrameworkStores<ApplicationDbContext>()