gpt4 book ai didi

c# - 从实体对象获取 ObjectContext 引用的最快方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:34:22 25 4
gpt4 key购买 nike

我正在为我的 EntityFramework 对象创建扩展,如 How to: Customize Generated Data Objects 中所述但在其中一些扩展中,我需要获取实例的 ObjectContext 以查找模型中的其他一些值。我找到了 Tip 24 – How to get the ObjectContext from an Entity但那是几年前写的,在此 similar SO question 中引用了它但我真的希望现在有更好的答案。

当然,这一定是经常需要的东西,以至于官方方法应该支持从实体本身检索实体的对象上下文。

提前感谢有关此实现的任何最新信息。

最佳答案

还有另一种解决方案,使用connected properties .

使用连接属性看起来像这样(警告:未经测试的代码):

public partial class Database1Entities
{
private struct ObjectContextProperty { }

partial void OnContextCreated()
{
this.ObjectMaterialized += (_, e) =>
{
e.Entity.GetConnectedProperty<Database1Entities, ObjectContextProperty>().Set(this);
};
this.ObjectStateManager.ObjectStateManagerChanged += (_, e) =>
{
if (e.Action == CollectionChangeAction.Add)
{
e.Element.GetConnectedProperty<Database1Entities, ObjectContextProperty>().Set(this);
}
else if (e.Action == CollectionChangeAction.Remove)
{
e.Element.GetConnectedProperty<Database1Entities, ObjectContextProperty>().Set(null);
}
};
}

/// <summary>
/// Gets the object context for the entity. Returns <c>null</c> if the entity is detached.
/// </summary>
/// <param name="entity">The entity for which to return the object context.</param>
public static Database1Entities FromEntity(EntityObject entity)
{
return entity.GetConnectedProperty<Database1Entities, ObjectContextProperty>().GetOrConnect(null);
}
}

然后您可以使用 Database1Entities.FromEntity 从实体对象中获取对象上下文。如果需要,您还可以在实体对象上定义实际属性:

public partial class Table1
{
/// <summary>
/// Gets the object context for this entity. Returns <c>null</c> if the entity is detached.
/// </summary>
public Database1Entities ObjectContext { get { return Database1Entities.FromEntity(this); } }
}

在此解决方案中,实体对象的 ObjectContext 属性是可选的。

关于c# - 从实体对象获取 ObjectContext 引用的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5707312/

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