2012-07-11 87 views
0

我有幾臺應用程序運行在一臺機器上,並且在該機器上安裝了MSSQL服務器。TransactionScope是否在LinQ查詢中對數據庫進行交叉進程鎖定?

應用程序是各種類型的,如WPF,WCF服務,MVC應用程序等。 所有人都訪問位於sql服務器上的唯一數據庫。 訪問模式是簡單的LinQ-to-SQL類調用。

在每個數據庫中,我做了一些查詢,一些檢查和一些數據庫寫入。

我的問題是: 我可以肯定地說這些事務範圍內調用不會在同一時間運行(是線程和進程安全)通過使用簡單的TransactionScope實例?

+0

是的,它確實使用transactionscope它將是安全的,也取決於您設置的IsolationLevel。 – ethicallogics 2012-07-11 11:23:19

回答

0

使用事務處理作用域顯然會使特定的連接事務處理。事務範圍本身的使用並不能阻止一臺機器同時執行同一事件的兩個不同進程。它確實確保執行的所有操作均已提交或回滾。每個進程所看到的數據視圖取決於隔離級別,默認情況下它是可序列化的,這很容易導致死鎖。一個更實用的隔離級別被讀取,最好與快照隔離,因爲這進一步減少了死鎖並等待時間。

如果您希望確保只有一個應用程序實例正在執行某項操作,則可以使用互斥鎖或使用數據庫鎖定,以便所有不同的進程嘗試獲取並在必要時等待。

+0

我想確保只有一個應用程序執行「1.檢查表中是否有行」2.如果是的話,創建一個「允許以僅創建1行的方式運行」。 – AgentFire 2012-07-11 12:12:07

+0

這是一個數據約束,可能最好使用插入觸發器來實現。 – Xhalent 2012-07-11 22:48:31

相關問題