2012-04-13 141 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