Как изменить значение по умолчанию ASP.NET имена таблиц идентификаторов in.NET ядро?

Я начал с .NET Core, в MVC 5 я изменил имена таблиц по умолчанию, например: AspNETUsers для пользователей таким образом, и он отлично работал: В IdentityModels класс I dded:

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<IdentityUser>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId");
        modelBuilder.Entity<ApplicationUser>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId");
        modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims");
        modelBuilder.Entity<IdentityRole>().ToTable("Roles");
    }

но он не работает в .NET CORE (MVC 6). Кто-нибудь может мне помочь? Большое спасибо.

5 ответов


попробуйте изменить привязку к

builder.Entity<ApplicationUser>(entity =>
       {
           entity.ToTable(name:"Users");
           entity.Property(e => e.Id).HasColumnName("UserId");

       });

- изменить названия этих таблиц (IdentityUserRole<Tkey>, IdentityUserToken<Tkey>, IdentityRoleClaim<Tkey>, IdentityUserClaim<Tkey>, IdentityUserLogin<Tkey>) вы должны указать тип TKey(тип, используемый для первичного ключа), который является строкой(GUID) по умолчанию, даже если вы его не изменили.

- если вы хотите изменить первичный ключ с GUID на inthttps://medium.com/@goodealsnow/asp-net-core-identity-3-0-6018fc151b4

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);

        builder.Entity<ApplicationUser>(entity =>
        {
            entity.ToTable(name: "User");         
        });

        builder.Entity<IdentityRole>(entity =>
        {
            entity.ToTable(name: "Role");
        });
        builder.Entity<IdentityUserRole<string>>(entity =>
        {
            entity.ToTable("UserRoles");
          //in case you chagned the TKey type
          //  entity.HasKey(key => new { key.UserId, key.RoleId });
        });

        builder.Entity<IdentityUserClaim<string>>(entity =>
        {
            entity.ToTable("UserClaims");
        });

        builder.Entity<IdentityUserLogin<string>>(entity =>
        {
            entity.ToTable("UserLogins");
             //in case you chagned the TKey type
          //  entity.HasKey(key => new { key.ProviderKey, key.LoginProvider });       
 });

        builder.Entity<IdentityRoleClaim<string>>(entity =>
        {
            entity.ToTable("RoleClaims");

        });

        builder.Entity<IdentityUserToken<string>>(entity =>
        {
            entity.ToTable("UserTokens");
            //in case you chagned the TKey type
           // entity.HasKey(key => new { key.UserId, key.LoginProvider, key.Name });

        });
    }

я добавляю второй ответ, потому что многие люди будут поражать это при попытке изменить имена таблиц в .NET core 2.1

процесс хорошо объяснен в Microsoft docs.

для тех, кто нуждается в быстром исправлении:

  1. наследуйте все ваши модели, которые вы хотите изменить (авторизация Microsoft по умолчанию поставляется с 7 моделями ). Например, изменение AspNetUsers на User и AspNetRoles на Role можно сделать следующее в существующих моделях:

    public partial class User : IdentityUser<int>
    {
        // code
    }
    
    public partial class Role : IdentityRole<int>
    {
        // code
    }
    

в этом примере я изменяю тип первичного ключа также потому, что по умолчанию nvarchar.

  1. в вашем контексте наследуйте от IdentityDbContext и используйте тот же тип, что и аргумент:

    public class AppDbContext : IdentityDbContext<User, Role, int>
    {
        // code
    }
    
  2. Далее мы должны обновить ConfigureServices на StartUp использовать новый User класс:

     services.AddDefaultIdentity<User, Role>()
     .AddEntityFrameworkStores<AppDbContext>();
    

тогда, если хотите, вам нужно перейти на обновление/создание базы данных. Зависит от того, новый это проект или старый.

Примечание: Если вы в настоящее время используете аутентификацию в своем проекте, как UserManager или SignInManager вы должны изменить свои общие аргументы на новые, например:

SignInManager<User>
UserManager<User>

надеюсь, что это поможет:)


полный список для ASP.Net ядро 2/2.1, основываясь на ответе @ahmed-al-jabry.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<User>(entity => { entity.ToTable(name: "User"); });
    modelBuilder.Entity<IdentityRole>(entity => { entity.ToTable(name: "Role"); });
    modelBuilder.Entity<IdentityUserRole<string>>(entity => { entity.ToTable("UserRoles"); });
    modelBuilder.Entity<IdentityUserClaim<string>>(entity => { entity.ToTable("UserClaims"); });
    modelBuilder.Entity<IdentityUserLogin<string>>(entity => { entity.ToTable("UserLogins"); });
    modelBuilder.Entity<IdentityUserToken<string>>(entity => { entity.ToTable("UserToken"); });
    modelBuilder.Entity<IdentityRoleClaim<string>>(entity => { entity.ToTable("RoleClaim"); });
}

есть еще 2 шага, необходимые для применения изменений:

  • Применить Add-Migration
  • обновление-базы данных