我想获取导航属性的外键值,而不必定义外键属性(在加载导航属性之前)。
为什么吗
我们缓存(例如)所有“状态” - 对象应用程序范围(是的,我们不能使用枚举)。当我们将具有导航属性的对象加载到此状态类时,存储库会将该属性设置为缓存项。
我可以使用外键属性,但由于EF知道密钥,我想从EF(可能通过RelationshipManager或导航属性的DBEntityReference)获取它,但我似乎无法找到它。
注意:我使用的是EF5,代码先于.Net 4.5
答案 0 :(得分: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()加载它,这些信息就会丢失。