最近使用READ_COMMITTED_SNAPSHOT,我們的用戶有時會得到超時過期錯誤,當他們要更新數據庫的一些紀錄。(我認爲像僵局DB時) 我們的數據庫是SQL Server 2008 R2
,我們的應用程序首先由EF5代碼開發。與EF代碼第5
今天我讀了一篇關於在SQL Server中使用READ_COMMITTED_SNAPSHOT
選項的文章,我認爲這個選項可以幫助我們防止DB中的死鎖。 Occording這篇文章中,它有兩個步驟:
1中的代碼在DB
激活READ_COMMITTED_SNAPSHOT
ALTER DATABASE testDatabase SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE testDatabase SET READ_COMMITTED_SNAPSHOT ON;
2-使用READ_COMMITTED_SNAPSHOT
選項:
using (var transactionScope =
new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions { IsolationLevel= IsolationLevel.Snapshot }))
{
// update some tables using entity framework
context.SaveChanges();
transactionScope.Complete();
}
該樣本,使用TransactionScop
聲明。但我們沒有使用TransactionScop
來管理Transactions
。例如我們在我們的模型中有繼承,並且當我們調用.SaveChange()
時,EF
自己創建和管理Transaction
。
有什麼辦法可以使用READ_COMMITTED_SNAPSHOT
而不使用TransactionScop
聲明?
從我的測試中,如果在TransactionOptions設置_IsolationLevel.Snapshot_,它將覆蓋數據庫設置和交易將在_Snapshot_隔離級別執行,而不是_ReadCommittedSnapshot_ – thepirat000