【发布时间】:2013-12-03 08:12:16
【问题描述】:
给定一个实体,我想以通用方式检索相关实体的主键。 例如:对于客户,我想要一份其订单的 ID 列表。
我尝试的当前签名:
GetPrimaryKeysOfRelatedEntities(DbContext db, object entity)
我能够检索实体的 PK,并且我能够检索实体的导航属性...但是我无法获取实体的导航属性的 PK。
我这里少了一个小链接!
这是我获取实体键的代码,它不适用于导航属性
private static IEnumerable<string> GetEntityType(DbContext db, Type entityType)
{
entityType = ObjectContext.GetObjectType(entityType);
var metadataWorkspace = ((IObjectContextAdapter)db).ObjectContext.MetadataWorkspace;
var objectItemCollection = (ObjectItemCollection)metadataWorkspace.GetItemCollection(DataSpace.OSpace);
ReadOnlyCollection<EntityType> entityTypes = metadataWorkspace.GetItems<EntityType>(DataSpace.OSpace);
if (entityTypes == null)
{
throw new InvalidOperationException();
}
var ospaceType = entityTypes.SingleOrDefault(t => objectItemCollection.GetClrType(t) == entityType);
if (ospaceType == null)
{
throw new ArgumentException(
string.Format("The type '{0}' is not mapped as an entity type.", entityType.Name), "entityType");
}
return ospaceType.KeyMembers.Select(k => k.Name);
}
此代码使用 EntityType,我可能应该使用其他东西,但我不确定是什么。
【问题讨论】:
标签: c# entity-framework-4 navigation-properties