在这种关联中,我得到错误“无法确定类型'Foo'和'Bar'之间关联的主要结束。必须使用关系流畅的API或显式配置此关联的主要结尾数据注释。“
public class Foo
{
public int Id { get; set; }
public int? MainBarId { get; set; }
public virtual Bar MainBar { get; set; }
[InverseProperty("Foo")]
public virtual ICollection<Bar> Bars { get; set; }
}
public class Bar
{
public int Id { get; set; }
public int FooId { get; set; }
public virtual Foo Foo { get; set; }
public int? OldFooId { get; set; }
public virtual Foo OldFoo { get; set; }
}
这里Foo有一组Bars,可以有一个主Bar(MainBar)。 Bar始终与Foo相关联,但可以引用另一个Foo(OldFoo)。
答案 0 :(得分:7)
通过[InverseProperty("Foo")]
,您告诉EF,Bar.Foo
和Foo.Bars
是一对多关联中的配对属性,因此很清楚。
然后有Foo.MainBar
和Bar.OldFoo
。 EF不知道这些是如何相关的。它们可以以一对一的关联配对,它们可以是独立的,即在另一侧具有“许多”多样性。所以你必须告诉EF。
我假设属性是独立的,即Bar
可以有OldFoo
而不要求此Bar
为Foo
的{{1}}同时。然后,它足以提供有关其中一个属性的EF信息:
MainBar
或
modelBuilder.Entity<Bar>().HasOptional(f => f.OldFoo).WithMany()
.HasForeignKey(f => f.OldFooId);
由于没有与这些关联的“一”端配对的逆属性,因此您无法使用数据注释(没有用属性装饰的属性)。