在ASP.NET身份3(DBO.ASPNETXXX)中重命名默认表,具有唯一的识别符或INT的INT



我在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()

施放ID

,无需通过INT或GUID:

.AddEntityFrameworkStores<ApplicationDbContext, Guid>()

只是添加

.AddEntityFrameworkStores<ApplicationDbContext>()

相关内容

  • 没有找到相关文章