Entity framework 将我的ApplicationsDbContext与使用MVC 5定义的IdentityDbContext无键组合

Entity framework 将我的ApplicationsDbContext与使用MVC 5定义的IdentityDbContext无键组合,entity-framework,asp.net-mvc-5,asp.net-identity,Entity Framework,Asp.net Mvc 5,Asp.net Identity,我将现有的DBContext与MVC5中的新IdentityDbContext相结合。我设法将这两种上下文结合起来,但当我运行应用程序并创建模型时,出现了以下错误消息: Context.IdentityUserLogin::EntityType“IdentityUserLogin”未定义键。定义此EntityType的键。 Context.IdentityUserRole::EntityType“IdentityUserRole”未定义键。定义此EntityType的键。我在读了一点书后找到了如

我将现有的DBContext与MVC5中的新IdentityDbContext相结合。我设法将这两种上下文结合起来,但当我运行应用程序并创建模型时,出现了以下错误消息:

Context.IdentityUserLogin::EntityType“IdentityUserLogin”未定义键。定义此EntityType的键。
Context.IdentityUserRole::EntityType“IdentityUserRole”未定义键。定义此EntityType的键。

我在读了一点书后找到了如何修复它的方法

创建以下两个配置类(随着数据库的增长和表之间关系的增加,在OnModelCreating方法中保持干净)


现在,在创建模型时,应该消除错误方法。对我来说确实如此。

不用担心配置类

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
        modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
        modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
    }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasKey(l=>l.UserId);
modelBuilder.Entity().HasKey(r=>r.Id);
modelBuilder.Entity().HasKey(r=>new{r.RoleId,r.UserId});
}

如果您创建单独的配置类,则会更加整洁。如果像上面显示的那样将其全部添加到OnModelCreating方法中,并且随着数据库的增长,它将非常快地填满。。。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Configurations.Add(new IdentityUserLoginConfiguration());
        modelBuilder.Configurations.Add(new IdentityUserRoleConfiguration());

    }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
        modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
        modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
    }