如何获取具有未知名称的DbEntityEntry EntityKey对象
我不应该使用DbEntityEntry的复杂属性方法或属性方法来获取EntityKey对象。 我找不到MSDN的任何示例,但我认为这在Entity Framework 5中是可能的。我不知道实体密钥或实体的名称,因为我使用的是通用存储库接口。
如果你有一个DbEntityEntry
对象,你首先找到包装的ObjectContext
获取EntityKey
:
var oc = ((IObjectContextAdapter)dbContext).ObjectContext;
然后你可以找到实体键
oc.ObjectStateManager.GetObjectStateEntry(dbEntityEntryObject.Entity) .EntityKey
编辑
我创建了两个扩展方法,让您接近您想要的:
public static EntityKey GetEntityKey(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 ( this DbContext context , DbEntityEntry 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
。