我不应该能够使用 DbEntityEntry 的复杂属性方法或属性方法来获取 EntityKey 对象吗?我找不到任何示例MSDN,但我认为这在 Entity Framework 5 中是可能的。我不知道实体键或实体的名称,因为我使用的是通用存储库接口。
问问题
16303 次
1 回答
34
如果你有一个DbEntityEntry
对象,你EntityKey
首先找到被包裹的对象ObjectContext
:
var oc = ((IObjectContextAdapter)dbContext).ObjectContext;
然后你可以找到实体键
oc.ObjectStateManager.GetObjectStateEntry(dbEntityEntryObject.Entity)
.EntityKey
编辑
我创建了两种扩展方法,让您接近您想要的:
public static EntityKey GetEntityKey<T>(this DbContext context, T entity)
where T : class
{
var oc = ((IObjectContextAdapter)context).ObjectContext;
ObjectStateEntry ose;
if (null != entity && oc.ObjectStateManager
.TryGetObjectStateEntry(entity, out ose))
{
return ose.EntityKey;
}
return null;
}
public static EntityKey GetEntityKey<T>( this DbContext context
, DbEntityEntry<T> dbEntityEntry)
where T : class
{
if (dbEntityEntry != null)
{
return GetEntityKey(context, dbEntityEntry.Entity);
}
return null;
}
现在你可以做
var entityKey = dbContext.GetEntityKey(entity);
或者
var entityKey = dbContext.GetEntityKey(dbEntityEntryObject);
运行时将选择正确的重载。
请注意,当实体具有复合键时,您建议的语法 ( dbEntityEntryObject.Property<EntityKey>()
) 不起作用。您必须EntityKey
从实体本身获取。
于 2013-04-09T07:40:54.157 回答