重命名 dbo.AspNetUsers table
Renaming dbo.AspNetUsers table
我正在尝试重命名由 ASP.net Identity 2.0 生成的默认 table 名称。我阅读了所有关于 Whosebug 的文章、问题和答案,但我仍然遇到同样的错误。
我将 table 重命名为 Roles、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 而不是 Users 虽然我做了上面的更改。现在完全绝望了。
数据库也是如此,具有新 table 名称的相同列:
以及 SQL 数据库项目:
您需要更新数据库。 Enable-Migrations
和 Update-Database
,详细解释 here。 EF 代码优先方法的要点是编写我们的模型 类 和配置,每次我们更改某些内容时,我们都会使用 EF 迁移来更新数据库架构。
使用 asp.net-identity-entityframework 的数据库优先方法得到了解释 here and here,不是那么简单
在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();
}
}
在Global.asax.cs文件中的Application_Start()方法中写入如下代码
Database.SetInitializer<ApplicationDbContext>(null);
我正在尝试重命名由 ASP.net Identity 2.0 生成的默认 table 名称。我阅读了所有关于 Whosebug 的文章、问题和答案,但我仍然遇到同样的错误。
我将 table 重命名为 Roles、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 而不是 Users 虽然我做了上面的更改。现在完全绝望了。
数据库也是如此,具有新 table 名称的相同列:
以及 SQL 数据库项目:
您需要更新数据库。 Enable-Migrations
和 Update-Database
,详细解释 here。 EF 代码优先方法的要点是编写我们的模型 类 和配置,每次我们更改某些内容时,我们都会使用 EF 迁移来更新数据库架构。
使用 asp.net-identity-entityframework 的数据库优先方法得到了解释 here and here,不是那么简单
在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();
}
}
在Global.asax.cs文件中的Application_Start()方法中写入如下代码
Database.SetInitializer<ApplicationDbContext>(null);