0

У меня есть приложение ASP MVC 5, но создатель модели создает дубликаты внешних ключей для таблиц IdentityUserRole, IdentityUserClaim и IdentityUserLogin.ASP.NET-Identity OnModelCreating Modelbuilder Создание повторяющихся внешних ключей

Например, в сгенерированном миграции таблице имеет Идентификатор роли, а также IdentityRole_ID

CreateTable(
      "dbo.UserRole", 
      c => new 
       { 
        RoleId = c.String(nullable: false, maxLength: 128), 
        UserId = c.String(nullable: false, maxLength: 128), 
        IdentityRole_Id = c.String(maxLength: 128), 
        ApplicationUser_Id = c.String(maxLength: 128), 
       }) 
      .PrimaryKey(t => new { t.RoleId, t.UserId }) 
      .ForeignKey("dbo.Role", t => t.IdentityRole_Id) 
      .ForeignKey("dbo.User", t => t.ApplicationUser_Id) 
      .Index(t => t.IdentityRole_Id) 
      .Index(t => t.ApplicationUser_Id); 

В моей беглой апи я это определяется следующим образом:

public IdentityUserRoleConfiguration() 
    { 
     HasKey(x => new { x.RoleId, x.UserId }); 
     ToTable("UserRole"); 
    } 

Мой ModelBuilder класс:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    // Add some DBSets  

    public ApplicationDbContext() 
     : base("ApplicationDbContext", throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

     // base.OnModelCreating(modelBuilder); 

     modelBuilder.Configurations.Add(new IdentityUserRoleConfiguration()); 
     modelBuilder.Configurations.Add(new IdentityUserLoginConfiguration()); 
     modelBuilder.Configurations.Add(new IdentityRoleConfiguration()); 
     modelBuilder.Configurations.Add(new IdentityUserClaimConfiguration()); 
     modelBuilder.Configurations.Add(new ApplicationUserConfiguration()); 


    } 

} 

Я прокомментировал заявление base.OnModelCreating(modelBuilder);, потому что он бросает S следующее сообщение об ошибке при запуске миграции:

A configuration for type 'Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole' has already been added. To reference the existing configuration use the Entity<T>() or ComplexType<T>() methods. 

ответ

0

Конфигурация может быть реализована следующим образом,

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<IdentityRole>().ToTable("Roles"); 
     modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles"); 
     modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims"); 
     modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLoginProviders"); 
     modelBuilder.Configurations.Add(new UserConfiguration()); 
    } 

Поскольку свободно конфигурации уже реализованы для большинства IdentityRole, IdentityUserRole, IdentityUserClaim, IdentityUserLogin в Microsoft.AspNet.Identity.EntityFramework Следовательно, это позволяет только переопределить ApplicationUser. Следовательно, единственный способ реализовать его - это как Entity<T>()