我有一个与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的关系!
答案 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现在知道它是多对多关系的一部分。