gpt4 book ai didi

c# - 为什么我们不能从 EntityObject 获取 ObjectContext

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:37 25 4
gpt4 key购买 nike

众所周知,如果我们有一个 EntityObject,则无法找到它所属的 ObjectContext。我想这很公平,但为什么我们可以延迟加载对象呢?延迟加载的过程肯定必须访问 ObjectContext 才能加载新对象吗?

最佳答案

accepted answer有局限性,因为它只有在实体至少有一种关系时才能工作。

然而,这也可以通过反射来完成:

public ObjectContext Context(EntityObject entity) {
var relationshipManager = ((IEntityWithRelationships)entity).RelationshipManager;
var wrappedOwnerProperty = relationshipManager.GetType().GetProperty("WrappedOwner",BindingFlags.Instance | BindingFlags.NonPublic);
var wrappedOwner = wrappedOwnerProperty.GetValue(relationshipManager);
var contextProperty = wrappedOwner.GetType().GetProperty("Context");
return (ObjectContext)contextProperty.GetValue(wrappedOwner);
}

在 VB.NET 中:

Function Context(entity As EntityObject) As ObjectContext
Dim relationshipManager = DirectCast(entity, IEntityWithRelationships).RelationshipManager
Dim wrappedOwnerProperty = relationshipManager.GetType.GetProperty("WrappedOwner", BindingFlags.Instance Or BindingFlags.NonPublic)
Return wrappedOwnerProperty.GetValue(relationshipManager).Context
End Function

注意:这是在 .NET Framework v. 4.5.1 下测试的。 YMMV,因为这取决于内部 WrappedOwner属性(property)和Context内部属性(property)BaseEntityWrapper<TEntity>类(class)。然而,如果 .NET 的早期/简化版本具有不同的内部属性/类,它应该足够简单以执行类似的操作。

注意:这可以通过将其作为 EntityObject 上的扩展方法来进一步改进。 ,并通过采用通用参数返回强类型 ObjectContext .它也可以通过使用某种方法按名称获取属性值来简化。

关于c# - 为什么我们不能从 EntityObject 获取 ObjectContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6869640/

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