gpt4 book ai didi

c# - 如何获得名称未知的 DbEntityEntry EntityKey 对象

转载 作者:可可西里 更新时间:2023-11-01 08:32:50 24 4
gpt4 key购买 nike

难道我不能使用 DbEntityEntry 的复杂属性方法或属性方法来获取 EntityKey 对象吗?我找不到任何示例 MSDN ,但我认为这在 Entity Framework 5 中是可能的。我不会知道实体键或实体的名称,因为我使用的是通用存储库接口(interface)。

最佳答案

如果你有一个 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来自实体本身。

关于c# - 如何获得名称未知的 DbEntityEntry EntityKey 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15893141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com