1

我想获取导航属性的外键值,而不必定义外键属性(在加载导航属性之前)。

为什么?

我们缓存(例如)应用程序范围内的所有“状态”对象(是的,我们不能为此使用枚举)。当我们将具有导航属性的对象加载到此状态类时,存储库会将属性设置为缓存项。

我可以使用外键属性,但由于 EF 知道键,我想从 EF 中获取它(可能通过导航属性的 RelationshipManager 或 DBEntityReference),但我似乎找不到它。

注意:我使用的是 EF5,首先在 .Net 4.5 中编码

4

1 回答 1

0

我从Slauma找到了一个答案(在 stackoverflow 上)(不确定我是否应该将其标记为重复?)。我不得不稍微更改代码来处理具有多个关系的实体。很多东西仍然很丑,但它有效:)

RelationshipManager relMgr = ((IObjectContextAdapter)context).ObjectContext.ObjectStateManager.GetRelationshipManager(document);
IEnumerable<IRelatedEnd> relEnds = relMgr.GetAllRelatedEnds();
IRelatedEnd relEnd = relEnds.Where(r => r.RelationshipName.EndsWith("Document_Status")).Single();
EntityReference<Status> entityRef = relEnd as EntityReference<Status>;
var entityKey = entityRef.EntityKey;

short statusId =(short)entityKey.EntityKeyValues[0].Value;

唯一的缺点是(据我所知。希望有人找到更好的方法?)一旦您分离实体或使用 AsNoTracking() 加载它,这些信息就会丢失。

于 2012-11-20T11:04:46.770 回答