与实体框架的多个一对多关系

时间:2012-06-14 15:46:19

标签: c# entity-framework orm entity-framework-4.1 entity-relationship

我正在使用EntityFramework 4.1。

我有以下型号:

public class User 
{
   [Key]
   public int Id { get; set; }
   public string Username { get; set; } 
   public string Password { get; set; }

   public virtual User Creator { get; set; }
   public virtual User LastEditor { get; set; }
}

当我尝试生成数据库时出现此错误:

  

无法确定之间关联的主要结束   类型'用户'和'用户'。这种关联的主要目的必须是   使用关系流畅的API或数据显式配置   注释

但我也有这门课:

public class Course 
{
   [Key]
   public int Id { get; set; }
   public string Name { get; set; } 

   public virtual User Creator { get; set; }
   public virtual User LastEditor { get; set; }
}

它工作正常,我生成了这些外键:

Creator_Id
LastEditor_Id

我的用户模型中是否有任何要添加的内容才能使其正常工作?

1 个答案:

答案 0 :(得分:7)

根据惯例,EF尝试在User.CreatorUser.LastEditor之间建立一对一的关系,因为它们都引用了User类,它们本身就位于此类中。不是Course类的情况。对于Course.CreatorCourse.LastEditor,EF会为User创建两个一对多关系。要在User中实现相同的属性,您必须配置与Fluent API的关系:

modelBuilder.Entity<User>()
    .HasOptional(u => u.Creator)     // or HasRequired
    .WithMany();

modelBuilder.Entity<User>()
    .HasOptional(u => u.LastEditor)  // or HasRequired
    .WithMany();