我想使用System.Transaction.TransactionScope來創建一個事務來調用一些存儲過程,但它似乎並沒有自行清理。一旦事務完成(提交或未處理事務範圍對象),後續到數據庫的連接將以讀取提交級別的可序列化打開,而不是像通常那樣進行提交。System.Transaction隱式事務搞亂我的其他連接
我打開和關閉每個調用的連接(關閉並返回到正常的.NET連接池),我錯過了一些方法來顯式重置連接,當我完成了它的使用交易?我認爲System.Transaction.TransactionScope背後的想法是隱藏所有的複雜性。
所以我的代碼看起來是這樣的:
using (var scope = new TransactionScope())
{
... make my 3 stored procedure calls ...
scope.Complete();
return returnCode;
}
,我猜是這樣做的正常方式。不過,如果我期待在sqlserver的探查,我可以看到被打開與
set transaction isolation level serializable
這與後續的非交易相關的數據庫活動搞亂連接,也顯然不是那麼快。我可以通過設置一個事務選項來解決這個問題,用ReadCommited來完成事務,但在我看來這不是這個操作的理想行爲。
我也試着明確創建一個CommitableTransaction對象,創建新的事務而不是使用環境,而且仍然沒有運氣。
關於如何解決這個問題的任何想法將不勝感激,因爲任何使用可序列化連接的調用在嘗試使用readpast鎖定提示時都會引發錯誤。
我確實看到了sp_reset連接。我可以逐步查看並明確關閉每個連接。你是如何重現序列化問題的?我是唯一使用系統,當我嘗試了這一點,並沒有任何死鎖(檢查跟蹤器和事務日誌記錄) – mjallday 2008-12-04 10:06:58
我的意思是:你聲稱它干擾「後續非交易相關的數據庫活動」 ;我說:「你確定?」。我懷疑sp_reset_connection意味着後續數據庫活動不受此隔離級別的影響。 – 2008-12-04 21:08:13