【发布时间】:2013-12-10 04:54:08
【问题描述】:
我正在使用带有代码优先方法和流畅 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 的所有对象,其中 bA 设置为 A 的此实例。我希望 B 类的导航属性 Cs 包含 C 类的所有对象,其中 Ca 设置为 Ba,Cb 设置为此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 对象创建的表的导航属性信息。是否可以通过 fluent API 告诉 Entity 框架它应该如何处理这些导航属性?
我现在所做的是我告诉 EF 忽略导航属性并且我已经覆盖了 get 方法,但这不是我正在寻找的完美解决方案,因为我希望 POCO 在任何情况下都保持不变方式。
如果有人能告诉我这是否可能以及此类构造的首选解决方案/常见做法是什么,那就太好了。
感谢您的帮助!
【问题讨论】:
标签: c# entity-framework entity-relationship fluent navigation-properties