【发布时间】:2013-06-20 15:52:27
【问题描述】:
我知道这是一个重复的问题,我知道如果“中间”表中有其他属性,这是不可能的。
我知道如何获得 m:N 关系而不是 1:n-n-1 的效果,但我想听听其他想法。
如果我有三个实体 A、B 和 AB,其中 AB 使 A:B 关系成为可能,并且它具有其他属性。
使用 Databasefirst 方法,我想制作 A 和 B 的部分类。
public partial Class A
{
public IEnumerable<EntityObject> Bs
{
get
{
return this.Select(p=>p.AB.B);
}
set { //... }
}
}
这样的事情是可能的。
只是在我的脑海中涂鸦。我现在正在度假,没有电脑,所以这个没有测试,只是写在我的手机上。
我发现这可能是在上下文处理或分离之后出现的问题,也包括在急切加载方法中。
有什么想法吗?
【问题讨论】:
-
你为什么不分解你通过在每个实体中拥有
ICollection自动获得的多对多,并创建你自己的中间实体,它直接引用每个其他实体加上额外属性?在我意识到 EF 可以为你做这件事之前,我只是为 m-2-m 做这件事。 -
我不确定你的意思。我目前拥有 A-AB-B 实体。你能详细解释一下你的意思吗
-
您可以手动定义 AB 实体,它恰好有一个对 A 和 B 的引用(从而生成 m-2-m)。 A 将有一个 AB 的列表,B 将有一个 AB 的列表。然后你可以把你喜欢的东西放在 AB 上,因为你可以控制实体。这是从代码优先的角度来看的。
-
不,你理解错了。我想在 A 中有一个 B 的集合,在 B 中有一个 A 的集合。我没有反对 AB,但我想用它作为代理,以便在 A 和 B 中有一个行为,就像那里一样不是 B 是 AB 表。我正在使用 AB 实体
-
如果我误解了您的问题,请纠正我,但我能想到的最接近的类比是 Rails 中的
has_many B, :through => [AB]语法。在 EF 的情况下,多对多关系不支持具有额外“有效负载”的连接表,因此您需要手动处理 AB,就像您正在做的那样。从那里开始,只需获取正确的 LINQ 查询以选择 AB 中的所有 B。你问的是这个吗?
标签: c# entity-framework partial-classes