2012-04-13 138 views
1

我有一些问题在EF中使用我的服务层进行连接。每当我试着做了加入我得到以下错误:实体框架4.3,使用连接

指定的LINQ表达式包含对与不同的上下文相关查询引用”

我花了无数的时间试图弄清楚这一点。我见过的大部分文章都涉及到来自不同上下文的实体集合。然而,这发生在我使用相同的数据库。我究竟做错了什么?

示例代码:

public virtual IList<ProductVariantAttribute> GetProductVariantAttributes(int ProductID) 
    { 
     var query = from pva in _productVariantAttributeRepository.Table 
        join b in _productAttributeRepository.Table on pva.ProductAttributeID equals b.ProductAttributeID 
        where pva.ProductID == ProductID 
        select pva; 

     var productVariantAttributes = query.ToList(); 
     return productVariantAttributes; 
    } 
+0

这些文章最有可能谈论上下文实例,并且由于您似乎有一个存储库模式,因此每个存储库可能都有其自己的上下文实例。 – meandmycode 2012-04-13 22:20:05

回答

1

这有没有关系数据库。它与ObjectContext的实例有关。

您在查询中引用了两个不同的存储库。我猜他们每个人都在包装一个EntityContext。这将导致此消息。

这也是一种反模式。我建议您每个HTTP请求或每个WCF调用或者您的工作单元都打开一个EntityContext。

+1

谢谢,我正在使用DI注册上下文界面我忘记在依赖注册器中添加.InstancePerHttpRequest()属性 – Dereck 2012-04-13 23:21:54