【问题标题】:Entity Framework 4: Access current datacontext in partial entity class实体框架 4:在部分实体类中访问当前数据上下文
【发布时间】:2011-03-06 10:57:17
【问题描述】:

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

谢谢!

【问题讨论】:

  • 这听起来不错,您能解释一下为什么需要这样做吗?也许还有另一种方法可以到达您需要去的地方(可能是关联或复杂类型)

标签: entity-framework entity-framework-4


【解决方案1】:

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

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

【讨论】:

  • 嗨。我们的实体将有一个属性“List”。这些属性在数据库的元结构(几个表)中定义。如果访问实体的这个属性,我需要从数据库中收集结构和值。我们的设计允许使用“动态”属性扩展实体。
  • 不过,我确实理解您对糟糕设计的担忧..:) 我可能会将其移至业务层,但我认为它是一个低级抽象,应该驻留在持久层中.. .
【解决方案2】:

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

http://blogs.msdn.com/b/alexj/archive/2009/06/08/tip-24-how-to-get-the-objectcontext-from-an-entity.aspx

扩展方法:

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;

【讨论】:

  • 将代码示例直接放入答案中,以防引用的源消失。
  • 正如文章作者所说,如果实体没有关系,这将不起作用。或者,这可以通过via reflection 完成。
猜你喜欢
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多