使用相同数据库的两个MVC 5应用程序中的标识表

时间:2016-03-29 13:36:34

标签: asp.net sql-server asp.net-mvc asp.net-identity

我需要为两个MVC5应用程序使用一个数据库。所以我有一个应用程序创建默认的身份表AspNetUsers等。现在从另一个应用程序我想创建单独的身份表。为此,我试图将表名从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表,然后重命名它。此问题的解决方案是什么,以便两个应用程序都具有单独的标识表。感谢

1 个答案:

答案 0 :(得分:0)

让每个MVC站点使用不同的架构并简化OnModelCreating以基于appSettings设置架构:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    var schemaName = ConfigurationManager.AppSettings["SchemaName"] ?? "dbo";
    dbModelBuilder.HasDefaultSchema(schemaName);
    base.OnModelCreating(dbModelBuilder);
}