将我的ApplicationsDbContext与IdentityDbContext结合使用没有使用MVC 5定义的键

时间:2014-01-03 21:07:35

标签: entity-framework asp.net-mvc-5 asp.net-identity

我将现有的DBContext与MVC 5中的新IdentityDbContext结合起来。我设法将两个上下文组合在一起但是当我运行我的应用程序并且正在创建模型时,我收到了以下错误消息:

Context.IdentityUserLogin :: EntityType'IdentityUserLogin'没有定义键。定义此EntityType的键。 Context.IdentityUserRole :: EntityType'IdentityUserRole'没有定义键。定义此EntityType的密钥。

2 个答案:

答案 0 :(得分:5)

我在做了一些阅读之后想出了如何修复它。

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

public class IdentityUserLoginConfiguration : EntityTypeConfiguration<IdentityUserLogin>
{

    public IdentityUserLoginConfiguration()
    {
        HasKey(iul => iul.UserId);
    }

}

public class IdentityUserRoleConfiguration : EntityTypeConfiguration<IdentityUserRole>
{

    public IdentityUserRoleConfiguration()
    {
        HasKey(iur => iur.RoleId);
    }

}

在Applications DbContext中的OnModelCreating方法中,将上面列出的两个配置添加到模型中:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

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

    }

现在应该在创建模型时摆脱错误方法。它确实适合我。

答案 1 :(得分:0)

不要打扰配置类。

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 });
    }