我需要为两个MVC5应用程序使用一个数据库。因此,我有一个应用程序可以创建默认的Identity表AspNetUsers等。现在,我想从另一个应用软件创建单独的Identity表。为此,我试图将表名从AspNetUsers重命名为"BackOfficeApplicationUsers"。以下是我的代码
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityRole>().ToTable("BackOfficeApplicationRoles");
modelBuilder.Entity<ApplicationUser>().ToTable("BackOfficeApplicationUsers");
modelBuilder.Entity<IdentityUserClaim>().ToTable("BackOfficeApplicationUserClaims");
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.UserId, r.RoleId }).ToTable("BackOfficeApplicationUserRoles");
modelBuilder.Entity<IdentityUserLogin>().HasKey(l => new { l.LoginProvider, l.ProviderKey, l.UserId }).ToTable("BackOfficeApplicationUserLogins");
}
当我更新数据库时,我得到一个错误"AspNetUsers表已经存在"。我知道这是因为在我的第二个应用程序中,它试图先创建AspNetUsers表,然后再重命名它。这个问题的解决方案是什么,这样两个应用程序都有单独的Identity表。感谢
让每个MVC站点使用不同的模式,并简化OnModelCreating
以基于appSettings:设置模式
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var schemaName = ConfigurationManager.AppSettings["SchemaName"] ?? "dbo";
dbModelBuilder.HasDefaultSchema(schemaName);
base.OnModelCreating(dbModelBuilder);
}