【发布时间】:2013-11-23 16:09:48
【问题描述】:
我在 MVC5 中创建了一个类,我想要一个内容的主要所有者,然后我想要一些内容的编辑器:
public class Content
{
public int ID { get; set; }
public IdentityUser Owner { get; set; }
public ICollection<IdentityUser> Editors { get; set; }
public string Title{ get; set; }
public string Body { get; set; }
}
在数据库上下文中,我有以下代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Content>()
.HasOptional(c => c.Editors)
.WithRequired()
.WillCascadeOnDelete();
modelBuilder.Entity<Content>()
.HasRequired(c => c.Owner)
.WithOptional()
.WillCascadeOnDelete();
}
我希望 Microsoft 以这样的方式实现 IdentityUser 对象,它可以用于其他实体类型,所以我可能做错了什么,因为当我尝试为 Content 实体创建控制器时输入,我收到以下错误:
EntityType 'IdentityUserLogin' has no key defined
EntityType 'IdentityUserRole' has no key defined
EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no key defined
EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no key defined
我还尝试将以下代码添加到ApplicationDbContext,如本问题Map tables using fluent api in asp.net MVC5 EF6?中所述:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(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 });
}
我一定是做错了什么。请告诉我如何处理我的 Content EntityType 中的用户。
【问题讨论】:
-
您的
Content类似乎缺少外键 ID。 -
使用 EntityFramework 时,您不需要外键 ID 字段。您只需将属性设置为关联类型,EF 会完成其余的工作(例如在数据库中存储外键 ID)。
标签: c# asp.net entity-framework asp.net-mvc-5 asp.net-identity