gpt4 book ai didi

c# - Entity Framework - CF/FA - 在 POCO 中定义过滤的导航属性

转载 作者:行者123 更新时间:2023-11-30 18:31:25 29 4
gpt4 key购买 nike

我正在使用 Entity Framework 代码优先方法和流畅的 API。给定以下 POCO 类...

class A {
public A {
this.Cs = new HashSet<C>();
this.Bs = new HashSet<B>();
}

public long Id { get; set; }
public virtual ICollection<C> Cs { get; set; }
public virtual ICollection<B> Bs { get; set; }
}

public class B {
public B {
this.Cs = new HashSet<C>();
}

public long Id { get; set; }
public virtual A A { get; set; }
public virtual ICollection<C> Cs { get; set }
}

public class C {
public long Id { get; set; }
public virtual A A { get; set; }
public virtual B B { get; set; }
}

...我想用 Fluent API 定义以下关系,但我不知道如何实现或是否可行。

我希望 A 类的导航属性 Cs 包含 C 类的所有对象,其中 c.A 设置为 A 的这个实例,而 c.B 为空。我希望 A 类的 Bs 包含 B 的所有对象,其中 b.A 设置为 A 的这个实例。我希望 B 类的导航属性 Cs 包含类 C 的所有对象,其中 C.a 设置为 B.a,C.b 设置为此B的实例。

一个例子可以更好地说明这一点:

+------+------+-----+
| C.Id | C.A | C.B |
+------+------+-----+
| 1 | 1 | |
| 2 | 1 | |
| 3 | 1 | 1 |
| 4 | 1 | 2 |
+------+------+-----+

然后 A.Cs 包含 { 1, 2},A.Bs 包含 { 1, 2},其中 B[id=1].Cs 包含 {3},B[id=2].Cs 包含 {4}。

因此,我只需要为 C 对象创建的表的导航属性信息。是否可以通过流畅的 API 告诉 Entity Framework 它应该如何使用这些导航属性?

我现在所做的是告诉 EF 忽略导航属性并且覆盖了 get 方法,但这不是我正在寻找的完美解决方案,因为我希望 POCO 在任何情况下都保持不变方式。

如果有人能告诉我这是否可能以及此类构造的首选解决方案/常见做法是什么,那就太好了。

感谢您的帮助!

最佳答案

您可以使用 Fluent 或数据注释或仅使用简单的命名约定来定义表之间的关系,但您不能使用其中任何一个来确定将哪些数据放入表中。您可以设置必填字段、主键、外键。关系可以是 1:1 或 1:0,1 或 1:many 或 many:many 等。但是没有办法告诉它特定的 ICollection 包含所有匹配项。这将是您的业务逻辑的责任,以确保当一个项目被添加到表 C 时,它也被添加到 A 的 ICollection。

关于c# - Entity Framework - CF/FA - 在 POCO 中定义过滤的导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20193498/

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