EntityFramework中IdentyUsers的集合 - 没有定义键

时间:2014-03-22 12:47:28

标签: entity-framework entity-framework-6 asp.net-identity

一切正常,直到我决定将IdentityUser集合添加到另一个实体作为导航属性。

在模型生成期间检测到一个或多个验证错误:

IdentityUserLogin: : EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType.
IdentityUserRole: : EntityType 'IdentityUserRole' has no key defined. Define the key for this EntityType.
IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no keys defined.
IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no keys defined.

但它们是Microsoft.AspNet.Identity.EntityFramework库的一部分。怎么没有定义键?

我的实体和数据库上下文(EF v6.1,AspNet.Identity v.2.0):

public class User : IdentityUser
{
    public virtual int OrganizationId { get; set; }
    public virtual Organization Organization { get; set; }
}

public class Organization
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual ICollection<User> Users { get; set; }
}

public class DatabaseModelContext : IdentityDbContext<User>
{
    public DatabaseModelContext() : base("ConnectionString") { }
    public DbSet<Organization> Organizations { get; set; }
}

还尝试定义显式关系:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<Organization>()
                .HasMany(o => o.Users)
                .WithOptional(u => u.Organization)
                .HasForeignKey(u => u.OrganizationId);
    modelBuilder.Entity<User>()
                .HasOptional(u => u.Organization)
                .WithMany()
                .HasForeignKey(u => u.OrganizationId);
}

没有成功!!!

它不能只是,必须为实体框架内部类定义键类型!!!

解决方案(更新)

其实我的简化示例并未反映我的真实应用情况。我很抱歉。 我在我的应用程序和组织实体中使用了多个Dbcontexts来自Dbcontext类派生的单独上下文。通过这种方式,此上下文对IdentityUser模型一无所知,但组织实体涉及用户实体 - 存在问题。

解决方案 - 我从IdentityDbContext !!!

中获取了所有其他上下文

1 个答案:

答案 0 :(得分:5)

其实我的简化示例并未反映我的真实应用情况。我很抱歉。我一直在我的应用程序中使用多个Dbcontexts,组织实体来自Dbcontext类派生的单独上下文。通过这种方式,此上下文对IdentityUser模型一无所知,但组织实体涉及用户实体 - 存在问题。

解决方案 - 我从IdentityDbContext !!!

中获取了所有其他上下文