【发布时间】:2012-11-19 10:18:27
【问题描述】:
我想获取导航属性的外键值,而不必定义外键属性(在加载导航属性之前)。
为什么?
我们缓存(例如)应用程序范围内的所有“状态”对象(是的,我们不能为此使用枚举)。当我们将具有导航属性的对象加载到此状态类时,存储库会将属性设置为缓存项。
我可以使用外键属性,但由于 EF 知道该键,我想从 EF 中获取它(可能通过关系管理器或导航属性的 DBEntityReference)但我似乎找不到它。
注意:我使用的是 EF5,在 .Net 4.5 中优先编码
【问题讨论】:
-
也许我不明白,但只是在您的实体中拥有
StatusId属性还不够吗? -
可能是快捷的后备解决方案。但是,当使用外键属性 Id 时,您需要使属性和导航属性保持同步,或者找到一种方法将其从 api 中隐藏(通过使用具有访问器属性的内部类)。这一切看起来有点乱,恕我直言,这很简单。
-
使用 EF 公开原始 FK 字段(称为 外键关联)是很常见的。 EF 在检测到更改时使它们与 FK 引用保持同步。
-
@GertArnold 仅当它们被标记为虚拟时。然后 EF 注入一个动态代理来处理这个问题。动态代理不会使用缓存的对象,而是从数据库加载。如果您不使用虚拟,则保持它们同步是您自己的责任
-
使用代理会实时发生,否则在
DbContext.DetectChanges()中(隐含在SaveChanges中)。
标签: .net entity-framework entity-framework-5