gpt4 book ai didi

entity-framework - 无法确定关联的主体

转载 作者:行者123 更新时间:2023-12-03 07:25:38 26 4
gpt4 key购买 nike

在这种关联中,我收到错误“无法确定类型 '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 有一个 Bar 集合,并且可以有一个主 Bar (MainBar)。 Bar 始终与 Foo 相关联,但可以引用另一个 Foo (OldFoo)。

  1. 如何使用数据注释在 EF 中映射此内容?
  2. 如果数据注释无法实现,如何使用 Fluent 实现此目的?

最佳答案

通过 [InverseProperty("Foo")],您告诉 EF Bar.FooFoo.Bars 是一个属性中的配对属性对于许多协会来说,这一点很清楚。

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

我假设这些属性是独立的,即 Bar 可以有一个 OldFoo,而不要求此 Bar FooMainBar 同时。然后,向 EF 提供有关其中一项属性的信息就足够了:

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

modelBuilder.Entity<Foo>().HasOptional(f => f.MainBar)
.WithRequired(b => b.OldFoo)

由于没有与关联的这些“一”端配对的反向属性,因此您无法使用数据注释来执行此操作(没有可以用属性来装饰的属性)。

关于entity-framework - 无法确定关联的主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16523686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com