无法确定关联的主要结束

时间:2013-05-13 13:46:14

标签: entity-framework

在这种关联中,我得到错误“无法确定类型'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)。

  1. 如何在EF中使用数据注释进行映射?
  2. 如果数据注释不可能,如何用流利的方式做到这一点?

1 个答案:

答案 0 :(得分:7)

通过[InverseProperty("Foo")],您告诉EF,Bar.FooFoo.Bars是一对多关联中的配对属性,因此很清楚。

然后有Foo.MainBarBar.OldFoo。 EF不知道这些是如何相关的。它们可以以一对一的关联配对,它们可以是独立的,即在另一侧具有“许多”多样性。所以你必须告诉EF。

我假设属性是独立的,即Bar可以有OldFoo而不要求此BarFoo的{​​{1}}同时。然后,它足以提供有关其中一个属性的EF信息:

MainBar

modelBuilder.Entity<Bar>().HasOptional(f => f.OldFoo).WithMany()
    .HasForeignKey(f => f.OldFooId);

由于没有与这些关联的“一”端配对的逆属性,因此您无法使用数据注释(没有用属性装饰的属性)。