【发布时间】:2009-11-23 23:10:32
【问题描述】:
小问题:
基本上,我正在尝试向我的实体添加一个标量属性,该属性包含 FK 实体的 ID。
到目前为止我尝试做的事情:
到目前为止,我尝试的是添加标量属性(称为 ChildId)并将其映射到数据库中的匹配列。现在您可以想象,当我尝试执行此操作时会遇到一些异常,因为实体框架抱怨 FK id 在两个地方进行管理,一次通过 x.ChildId,另一个通过 x.Child.ChildId。
现在我明白它为什么这样做了,但我需要一些为什么能够拥有一个自动填充 ChildId 的标量属性。
我知道我可以做但真的不想做的事情:
我意识到我可以编写一个类似于以下内容的 linq 查询(我已经实现了部分类的另一半并在那里添加了一个名为 ChildId 的属性):
from x in db.Parent
select new Parent { ParentName = x.ParentName, ..., ChildId = x.Child.ChildId }
但这非常混乱,特别是当我有 30 个返回父对象的奇怪查询时,需要为每个查询重复此映射...
我还意识到,在我执行完查询后,我可以执行以下操作:
var childId = parent.Child.Id;
但这会导致触发额外的查询,或者如果我主动加载孩子,在任何一种情况下,当我只想要 ID 时,我会提取比我需要的更多的数据......
所需的最终结果:
那么我该如何绕过这些限制,以便我可以像这样(或非常相似的东西)编写我的查询:
from x in db.Parent
select x
并拥有它,以便我可以去:
var childId = parent.Child.Id; //Where in this case the only property retrieved would be the Id
//Or
var childId = parent.ChildId;
干杯 安东尼
编辑:
谢谢你的回复...
我也是自己想出来的。基本上我在想,如果 EF 支持延迟加载,它必须将 ID 存储在某处。然后它点击它必须在参考中......因此对我来说它是这样的:
destination.PlanTypeId = (int)source.PlanTypeReference.EntityKey.EntityKeyValues[0].Value;
也感谢创建扩展属性的想法......将非常有用。
【问题讨论】:
标签: c# .net linq entity-framework foreign-keys