Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架4:访问部分实体类中的当前datacontext_Entity Framework_Entity Framework 4 - Fatal编程技术网

Entity framework 实体框架4:访问部分实体类中的当前datacontext

Entity framework 实体框架4:访问部分实体类中的当前datacontext,entity-framework,entity-framework-4,Entity Framework,Entity Framework 4,我想用方法和属性扩展分部类中的EF实体。我经常这样做。 但现在我需要将来自这个实体的数据与来自其他实体的数据结合起来。因此,我需要能够访问entities objectcontext(如果已附加)来进行这些查询。 有没有办法从其中获取实体objectcontext 塔克斯 没有内置方式从实体获取当前的ObjectContext。基于EntityObject类和POCO代理的实体在内部使用ObjecContext,但不公开它 将这种dependency添加到您的实体中被认为是糟糕的设计,因此您也许

我想用方法和属性扩展分部类中的EF实体。我经常这样做。 但现在我需要将来自这个实体的数据与来自其他实体的数据结合起来。因此,我需要能够访问entities objectcontext(如果已附加)来进行这些查询。 有没有办法从其中获取实体objectcontext


塔克斯

没有内置方式从实体获取当前的
ObjectContext
。基于
EntityObject
类和POCO代理的实体在内部使用
ObjecContext
,但不公开它


将这种dependency添加到您的实体中被认为是糟糕的设计,因此您也许应该解释一下您正在尝试做什么,我们可以找到其他(更好)的解决方案。

即使不推荐,我自己也不使用它(正如Ladislav所说:糟糕的设计),我偶然发现了一个解决方案:

扩展方法:

public static ObjectContext GetContext( 
   this IEntityWithRelationships entity 
) 
{ 
    if (entity == null)  
       throw new ArgumentNullException("entity"); 

    var relationshipManager = entity.RelationshipManager; 

    var relatedEnd = relationshipManager.GetAllRelatedEnds() 
                                        .FirstOrDefault(); 

    if (relatedEnd == null)  
       throw new Exception("No relationships found"); 

    var query = relatedEnd.CreateSourceQuery() as ObjectQuery; 

    if (query == null)  
       throw new Exception("The Entity is Detached"); 

    return query.Context; 
}
实体内部

var myContext = this.GetContext() as MyEntities;

这听起来不错,你能解释一下为什么需要这样做吗?也许还有另一种方法可以帮助你找到你需要去的地方(可能是一个关联或复杂类型)。我们的实体将有一个财产“清单”。这些属性在数据库的元结构(几个表)中定义。如果访问实体的这个属性,我需要从数据库中收集结构和值。我们的设计允许用“动态”属性来扩展实体。但是,我确实理解您对糟糕设计的关注。…)我可以把它移到业务层,但是我认为它是一个低层抽象,它应该驻留在持久层中……把代码示例直接放到答案中,如本文作者所述,如果实体没有关系,这将不起作用。或者,也可以这样做。