2012-01-27 74 views
2

我已經在計劃中的結構如下:的LINQ to SQL Transaction.Complete VS DataContext.SubmitChanges

Using transaction As New TransactionScope() 

'Make some changes to the data 
... 

db.SubmitChanges() 

'Make some other changes to the data 
... 

db.SubmitChanges() 


transaction.Complete() 

End Using 

將變更實際保存到當每個的SubmitChanges()被稱爲數據庫,或只交易.Complete()會在物理上保存它們嗎?我的意思是我不希望1個用戶所做的中間更改對其他用戶可見。

+0

你可以在'transaction.Complete()'之前通過斷點來快速嘗試。如果你這樣做了,你很可能會發現任何人試圖訪問你更新的數據在調用'transaction.Complete()'之前都不會得到任何結果,這取決於隔離級別,我認爲這是默認序列化的。因此,我懷疑的答案是默認情況下,不,沒有用戶會得到中間更改,但可能取決於[隔離級別](http://msdn.microsoft.com/en-us/library/ms173763.aspx) – Smudge202 2012-01-27 11:55:53

+0

檢查以下鏈接你的答案: http://stackoverflow.com/questions/542525/transactionscope-vs-transaction-in-linq-to-sql – 2012-01-27 12:04:34

+0

你可以就在你的日常和你的最後調用的SubmitChanges一次也會很好。 – Pleun 2012-01-27 12:58:07

回答

3

SubmitChanges將發送DML語句。提交將提交交易。雖然交易未提交,但其他讀者不會看到您的更改。您無需保存部分更改,甚至可以在拍攝期間使其可見。您可以多次調用SubmitChanges。沒有明確的交易,SubmitChanges將在內部使用一個交易。