实体类型MVC5 EF6中的用户

Gun*_*nar 49 c# asp.net entity-framework asp.net-mvc-5 asp.net-identity

我在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; }
}
Run Code Online (Sandbox Code Playgroud)

在数据库上下文中,我有以下代码:

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();
}
Run Code Online (Sandbox Code Playgroud)

我希望微软以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
Run Code Online (Sandbox Code Playgroud)

我还尝试将以下代码添加ApplicationDbContext到此问题中的描述使用asp.net MVC5 EF6中的流畅api映射表?:

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 });
}
Run Code Online (Sandbox Code Playgroud)

我一定做错了什么.请告诉我如何处理Content EntityType中的用户.

小智 104

我有同样的问题,我发现我没有打过电话

 base.OnModelCreating(modelBuilder);
Run Code Online (Sandbox Code Playgroud)

在我的DbModel中

  • 这个shoudl是接受的答案,很多人用DbContext删除基类实现但是从IdentityDbContext继承它是至关重要的 (25认同)
  • 我得到了同样的错误,在使用接受的答案之前,我读了你的答案并意识到我删除了那行代码.这解决了这个问题,我确信这是大多数人遇到这个问题的答案. (2认同)

Ola*_*ybø 61

以下方法OnModelCreating将创建工作上下文.不确定它是否是您想要的映射.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Content>()
        .HasMany(c => c.Editors)
        .WithOptional()
        .WillCascadeOnDelete(false);

    modelBuilder.Entity<Content>()
        .HasRequired(c => c.Owner)
        .WithOptional()
        .WillCascadeOnDelete(false);

    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 });
}
Run Code Online (Sandbox Code Playgroud)

  • 我的错误,我有两个上下文,应用程序上下文和内容上下文,我在应用程序上下文中为IdentityUser设置了键映射.现在它就像一个魅力.谢谢. (2认同)