Ответ 1
Попробуйте изменить привязку к
builder.Entity<ApplicationUser>(entity =>
{
entity.ToTable(name:"Users");
entity.Property(e => e.Id).HasColumnName("UserId");
});
Я начал с .NET Core, в MVC 5 я изменил имена таблиц по умолчанию, например: AspNETUsers для Пользователей таким образом, и он отлично работал: В IdentityModels Класс я 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). Может кто-нибудь мне помочь? Большое спасибо.
Попробуйте изменить привязку к
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 на int https://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 });
});
}
Полный список ASP.Net Core 2/2.1, основанный на ответе @ahmed-al-jabry.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Override default AspNet Identity table names
modelBuilder.Entity<User>(entity => { entity.ToTable(name: "Users"); });
modelBuilder.Entity<IdentityRole>(entity => { entity.ToTable(name: "Roles"); });
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("UserTokens"); });
modelBuilder.Entity<IdentityRoleClaim<string>>(entity => { entity.ToTable("RoleClaims"); });
}
Есть еще 2 шага, необходимые для применения изменений:
Чтобы обновить имена таблиц по умолчанию IdentityModels Class MVC
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("Users").HasKey(x => x.Id);
modelBuilder.Entity<ApplicationUser>().ToTable("Users")HasKey(x => x.Id);
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles").HasKey(x => x.RoleId);;
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins").HasKey(x => x.UserID);;
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims")HasKey(x => x.Id);;
modelBuilder.Entity<IdentityRole>().ToTable("Roles")HasKey(x => x.Id);;
}
Я добавляю второй ответ, потому что многие люди будут сталкиваться с этим при попытке изменить имена таблиц в .NET core 2.1
Процесс хорошо объяснен в документах Microsoft.
Для тех, кому нужно быстрое решение:
Унаследуйте все свои модели, которые вы хотите изменить (авторизация Microsoft по умолчанию поставляется с 7 моделями). Например, изменив AspNetUsers на User и AspNetRoles на Role, вы можете сделать следующее в существующих моделях:
public partial class User : IdentityUser<int>
{
// code
}
public partial class Role : IdentityRole<int>
{
// code
}
В этом примере я изменяю тип первичного ключа также потому, что по умолчанию используется nvarchar
.
В вашем контексте наследуйте от IdentityDbContext и используйте тот же тип, что и аргумент:
public class AppDbContext : IdentityDbContext<User, Role, int>
{
// code
}
Затем мы должны обновить ConfigureServices
в StartUp
чтобы использовать новый класс User
:
services.AddDefaultIdentity<User, Role>()
.AddEntityFrameworkStores<AppDbContext>();
Затем, если хотите, вам нужно перейти на обновление/создание базы данных. Зависит, если это новый или старый проект.
Примечание. Если в настоящее время вы используете аутентификацию в своем проекте,
UserManager
какUserManager
илиSignInManager
вы должны изменить их общие аргументы на новые, например:
SignInManager<User>
UserManager<User>
Надеюсь, это поможет :)
Для MVC5 IdentityModels
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<IdentityUser>().Table("Users").Key(x => x.Id);
builder.Entity<ApplicationUser>().Table("Users").Key(x => x.Id);
builder.Entity<IdentityUserRole>().Table("UserRoles").Key(x => x.RoleId); ;
builder.Entity<IdentityUserLogin>().Table("UserLogins").Key(x => x.UserId); ;
builder.Entity<IdentityUserClaim>().Table("UserClaims").Key(x => x.Id); ;
builder.Entity<IdentityRole>().Table("Roles").Key(x => x.Id); ;
}