2011-08-20 47 views
0

我有一個EF 4模型,我正在使用自我跟蹤實體。在這個模型中有一個叫做組織的實體。每個組織可以有許多地點(地址)。如果我嘗試選擇一個位置(這樣我就可以將其刪除),即:有多個兒童實體的開放數據讀取器的Erorr

var location = _container.Locations.FirstOrDefault(l => l.Id == id); 

我得到一個erorr,已經有開放的,所以我不能打開另一個數據讀取器。如果我做以下操作:

var location = _container.Locations.Include("Organisation").FirstOrDefault(l => l.Id == id); 

然後它都可以正常工作。

使用Intellitrace我可以看到,失敗的查詢它執行一個ADO命令來獲取位置,然後執行另一個命令來獲取位置和組織。

這是一個錯誤還是我需要爲自我跟蹤實體做不同的事情?

乾杯

回答

0

不,它不是一個錯誤。這通常發生在迭代一個查詢的結果時,並且在此迭代中執行另一個查詢(由於延遲加載也可能發生,但自我跟蹤實體不支持延遲加載)。最簡單的解決方案就是允許多個活動數據讀取器(您的數據庫必須支持它)。對於SQL Server 2005及更新版本,您可以簡單地將此部分添加到連接字符串中:MultipleActiveResultSets=true;

+0

我已經啓用了MARS。我只是使用一個單一的LINQ查詢 - 底層的實現正在做第二個SQL查詢,所以我仍然認爲這是一個錯誤。儘管我有一個簡單的解決方法,所以我沒有打擾。 – Jonesie