如何首先使用EF代码向aspnet用户添加外键?

时间:2017-05-28 08:06:59

标签: entity-framework ef-code-first

我的代码是:

public class UserGroupUser
{
    public int UserGroupUserId { get; set; }
    public string UserId { get; set; }
    [Key, ForeignKey("UserId")]
    public virtual ApplicationUser ApplicationUser { get; set; }
}

当我尝试创建控制器时出现此错误:

  

EntityType' IdentityUserLogin'没有键定义。定义键   这个实体类型。

     

EntityType' IdentityUserRole'没有键定义。定义键   这个实体类型。

     

EntityType' IdentityUserLogins'基于' IdentityUserLogin'那   没有定义键。

     

EntityType:EnititySet' IdentityUserRoles'是根据   ' IdentityUserRole'没有定义键。

但是我可以在所有表​​的SQL服务器管理中看到我的数据库中的键。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

实体需要主键。相应地更改其他模型。

public class UserGroupUser
{
    [Key]
    public int UserGroupUserId { get; set; }
    public string UserId { get; set; }
    [ForeignKey("UserId")]
    public virtual ApplicationUser ApplicationUser { get; set; }
}

答案 1 :(得分:0)

事实证明,EF无法识别IdentityUserLogin,IdentityRole,IdentityUserRole表中的键(我不知道原因)。所以我不得不通过覆盖我的MainContext类中的OnModelCreating方法(继承自System.Data.Entity.DbContext)来确认这些表已经有了键:

public class MainContext : DbContext
{
    public MainContext() : base("MyDatabaseConnectionString") { }

    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 });
        base.OnModelCreating(modelBuilder);
    }

    public DbSet<UserGroup> UserGroups { get; set; }
    public DbSet<UserGroupUser> UserGroupUsers { get; set; }

}

似乎在生成数据库之前执行此方法。