2011-03-14 51 views
1

當在LinqToSql DataContext上設置LoadOptions屬性時,如果上下文已經從另一個查詢返回結果,則會發生異常「在從結果返回結果後不允許設置加載選項查詢「被拋出。如何判斷LinqToSql DataContext以前是否返回結果

我想知道的是,有沒有辦法檢查DataContext對象,看看它是否已經返回以前的查詢結果?

回答

0

您通常不會將DataContext保留足夠長的時間以解決此問題。該類的設計在創建和銷燬方面很便宜,因此通常會爲單個工作單元創建一個新的DataContext對象,然後處理它。喜歡的東西:

using(var db = new TestDataContext()) 
{ 
    db.LoadOptions = CreateLoadOptions(); 
    var p = (from person in db.Persons 
      where <someCondition> 
      select p) 
      .First(); 

    p.SomeProperty = someValue; 
    db.SubmitChanges(); 
} 

我認識到,在技術上不回答你的問題,但我不知道的方法來檢查是否查詢已在自己設置一個標誌的DC短執行碼。

+0

我會盡量先發現異常,如果不行的話,我會按照你的建議把工作單元分成小塊,謝謝。 – Simon 2011-03-14 02:27:28

+0

這不是你遇到的唯一問題,如果你將DataContext放在太長的時間內,儘管遠離它。您應該真的重構代碼以根據需要創建這些上下文對象。 – 2011-03-14 02:46:15

1

好吧,它不是DataContext,而是返回結果本身,而不是查詢。查詢是延遲加載的,這意味着在實際需要結果之前他們不會訪問數據庫。例如,調用.ToList()或循環遍歷結果。

仍然不完全回答你的問題,但我建議在DataContext的構造函數中設置LoadOptions - 或者在實例化後立即設置。這應該消除這個謎團。

0

我有同樣的問題....我發現避免異常(因爲你甚至不能重置配置)的唯一方法是檢查LoadOptions是否爲null。如果它是空的,我設置新的選項,如果它不是我創建一個新的DataContext實例。

+0

我實際上已經在做空檢查。我認爲即使LoadOptions爲null,在我的情況下,因爲存儲過程被稱爲第一個查詢,所以仍然拋出異常。 – Simon 2011-03-14 02:19:31

相關問題