2012-10-04 52 views
2

我正在使用LINQ到SQL並運行直接SQL查詢 - 選擇語句 - 哪些使用(XQuery)查詢XML列。多個這樣的查詢並行運行,我得到了死鎖異常。死鎖使用LINQ到SQL選擇

運行時select是否獲取某種鎖?還有更新與Serializable隔離級別並行發生。

任何指針如何解決這個問題可能會有所幫助。如何在Linq To SQL中指定NOLOCK?

+1

你能發表一些代碼嗎? – bugged87

+0

你*只是*運行查詢?是否有任何代碼正在更新?從查詢中獲得僵局是非常不尋常的 –

回答

2

我檢查了它Scott Hanselman's博客文章。以這種方式嘗試的示例

ProductsNewViewData viewData = new ProductsNewViewData(); 
using (var t = new TransactionScope(TransactionScopeOption.Required, 
new TransactionOptions { 
    IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted 
})) 
{ 
    viewData.Suppliers = northwind.Suppliers.ToList(); 
    viewData.Categories = northwind.Categories.ToList(); 
} 

希望它對您有所幫助。在他的博客文章中閱讀更多內容。

3

爲什麼你會陷入僵局? SELECT自身不能與另一個SELECT發生死鎖。必須有更多的事情發生。 Capture the deadlock XML graph並在此發佈,以便我們可以幫助您分析它。一旦我們對僵局有所瞭解,我們可以推薦一個解決方案,它幾乎總是您缺少的必需索引。

不是啓用髒讀(NOLOCK提示或讀取未提交的隔離級別),這是不正確的方法。 Dirty reads are inconsistent reads並返回不正確數據。如果需要,可能需要row versioning-based reads,即how this very site一旦解決了問題。

+0

對不起,我會更新這個問題。還有更新與Serializable隔離級別並行發生。 – ABC

+0

讀取/選擇正在讀取提交的快照隔離級別下運行。 – ABC

+0

我說因爲SQL Server實例是SQL Azure,它的默認隔離級別是Read Committed Snapshot – ABC