使用EF4 Code First时具有2个相同类型的属性/关系时出错

时间:2011-04-10 07:45:22

标签: many-to-many entity-relationship ef-code-first entity-framework-4.1

我有一个与Y有很多关系的类X.如果我只有那个属性,那么EF将正确生成第3个XY表。但是,如果我希望与X类型具有多对多的关系,并且与Y具有1对多的关系。

为了说明我有这样的事情:

class Location
{
  public ICollection<Person> Visitors {get;set;}
}

class Person
{
  public Location Home {get;set}
  public ICollection<Location> VisitedPlaces {get;set;}
}

当我有两个引用时,EF会停止生成第3个表格,并且每个属性只给出1对1的关系!

1 个答案:

答案 0 :(得分:1)

您必须将其添加到派生的上下文中:

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

    modelBuilder.Entity<Person>()
        .HasRequired(p => p.Home)
        .WithMany()
        .WillCascadeOnDelete(false);
}

问题是EF无法正确推断映射,因为它不知道Visitors类中的Location集合是否是声明的多对多关系的一部分或者是一对一 - 很多关系(它不能成为两者的一部分)。我的例子定义了一对多关系在Location上没有导航属性,所以EF现在知道它是多对多关系的一部分。