我的代码是:
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服务器管理中看到我的数据库中的键。 我该如何解决这个问题?
答案 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; }
}
似乎在生成数据库之前执行此方法。