我不应该能够得到使用的DbEntityEntry的复杂属性方法或属性方法的EntityKey对象。 我找不到任何的例子MSDN ,但我相信这是实体框架5.尽可能我使用的是通用的仓库接口我不知道实体键或实体的名称。
Answer 1:
如果你有一个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
从实体本身。
文章来源: How do you get a DbEntityEntry EntityKey object with unknown name