在这种关联中,我得到错误"无法确定类型'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; }
}
Run Code Online (Sandbox Code Playgroud)
这里的Foo有一系列Bars,可以有一个主Bar(MainBar).Bar始终与Foo相关联,但可以引用另一个Foo(OldFoo).
通过[InverseProperty("Foo")]你告诉EF,Bar.Foo并且Foo.Bars是一对多关联中的配对属性,所以很清楚.
然后有Foo.MainBar和Bar.OldFoo.EF不知道这些是如何相关的.它们可以在一对一关联中配对,它们可以是独立的,即在另一侧具有"许多"多样性.所以你必须告诉EF.
我假设性质是独立的,即一个Bar可以有一个OldFoo没有这个要求Bar是Foo的MainBar在同一时间.然后,它足以提供有关其中一个属性的EF信息:
modelBuilder.Entity<Bar>().HasOptional(f => f.OldFoo).WithMany()
.HasForeignKey(f => f.OldFooId);
Run Code Online (Sandbox Code Playgroud)
要么
modelBuilder.Entity<Foo>().HasOptional(f => f.MainBar)
.WithRequired(b => b.OldFoo)
Run Code Online (Sandbox Code Playgroud)
由于没有与关联的这些"一"端配对的逆属性,因此无法使用数据注释(没有用属性装饰的属性).
| 归档时间: |
|
| 查看次数: |
4855 次 |
| 最近记录: |