Переименование таблицы dbo.AspNetUsers
Я пытаюсь переименовать имена таблиц по умолчанию, созданные ASP.net Identity 2.0. Я прочитал все статьи, вопросы и ответы на stackoverflow, но я все равно получаю ту же ошибку.
Я переименовал эти таблицы в роли, UserClaims, Logins, UserRoles и Users. Я также изменил приложение dbcontext на следующие
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("Users", "dbo");
modelBuilder.Entity<IdentityRole>().ToTable("Roles", "dbo");
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles", "dbo");
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims", "dbo");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins", "dbo");
}
}
Но я продолжаю получать ошибку Invalid object name 'dbo.AspNetUsers'.
, и я понятия не имею, почему она все еще пытается найти AspNetUsers в первую очередь, а не просто пользователей, хотя я сделал изменения выше. В настоящее время полностью отчаянно.
![enter image description here]()
В базе данных также одинаковые столбцы с именами новых таблиц:
![enter image description here]()
И проект базы данных SQL:
![enter image description here]()
Ответы
Ответ 1
Вам нужно обновить базу данных. Enable-Migrations
и Update-Database
, подробно объясняется здесь. Первым подходом к EF-коду является запись наших классов моделей и конфигураций, и каждый раз, когда мы меняем что-то, мы используем миграции EF для обновления схемы базы данных.
Первый подход к базе данных с asp.net-identity-entityframework объясняется здесь и здесь, не так прямой
Ответ 2
Напишите следующий код в IdentityModels.cs
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DBConnectionString", throwIfV1Schema: false)
{
}
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims");
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins");
modelBuilder.Entity<IdentityRole>().ToTable("Roles");
modelBuilder.Entity<ApplicationUser>().ToTable("Users");
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
Напишите следующий код в методе Application_Start() в файле Global.asax.cs
Database.SetInitializer<ApplicationDbContext>(null);