2009-05-21 57 views
4

目前我正在努力處理實體框架問題。我有一個位於ef框架之上的wcf服務,並允許對框架進行查詢。在某些時候,用戶可以從框架請求文件。這些文件通過解決方案條目進行引用,因此,當您從解決方案請求文件時,引用會被加載以訪問文件存儲庫。在實體框架中卸載數據引用

這一切都正常工作,但從那時起,無論何時您做另一個返回解決方案條目的查詢,整個文件都會附加到返回結果中。我需要一些分離或卸載引用的方式,以便結果條目只會再次包含對文件存儲的未加載引用。

我試圖創建一個新的上下文並查詢該上下文以從中檢索信息,但是當我這樣做時,原始上下文中的實體也發生了更改。

我試圖從原始上下文中分離實體,然後從新的上下文中進行查詢。那也行不通。

我找到了一個這樣做的方法。對於所有非文件下載查詢,我分離結果實體,並通過電線發送。我不確定這是否是最好的方法。

我希望有人能夠提供一些見解,謝謝你的努力。

+0

您能否澄清您如何託管WCF服務(自託管或IIS託管)並解釋您的解決方案參考文件所包含的含義(如何參考與文件相關)。 – 2010-02-28 11:39:52

+0

由於實體框架,該站點由IIS託管,並且引用與文件相關。這些文件位於單獨的表格中,但通過外部鍵鏈接到信息表。因此,要從信息表訪問鏈接的實體,您必須加載文件參考。一旦發生延遲加載,您將無法卸載鏈接。 – Johannes 2010-03-01 08:12:38

回答

0

您遇到的問題可能是更改跟蹤,默認情況下已啓用。

可能的解決方案:

禁用更改跟蹤與MergeOption.NoTracking

using (MyEntities _context = new MyEntities()) 
{ 
    _context.Widgets.MergeOption = MergeOption.NoTracking; 

    return _context.Widgets.ToList(); 

} 

article可以幫助你指出如何處理這個問題,如果上述解決方案不起作用正確的方向。

我最近也遇到過類似的問題。問題在於上下文保持對我正在使用的對象的引用(顯然)。每當我對相同類型的對象進行更改時,即使是在獲得新的上下文(所以我認爲)的情況下,對象也正在發生變化。

在我的同事的幫助下,我們確定由於我用IoC容器(每個Web請求的生活方式)註冊它的方式導致上下文處於懸停狀態。當我將生活方式改變爲瞬態(明確提供了一個新實例)時,對相同類型對象的改變不受影響。

希望這會有所幫助。