我遇到了我的應用程序中的情況,我需要使用表鎖提示或將事務隔離級別設置爲默認的Read Committed以外的其他方式,以解決死鎖問題。我正在使用面向服務的體系結構,每個服務調用都作爲一個原子操作進行操作,並且Linq To Sql充當輕量級DAL。每個服務電話叫我的業務層,並宣佈新的交易是這樣的:TransactionScope需要多個隔離級別?
using (var scope = new TransactionScope())
{
// Get datacontext
// do Business Logic stuff, including database operations via Linq To Sql
// Save transaction
scope.Complete();
}
的問題是,需要很多數據庫操作有時我有複雜的業務邏輯。一些讀取,一些寫入,一些讀取更新等,全部在相同的服務調用中,並且因此是相同的事務。
我已閱讀關於Linq To Sql無法向您的linq查詢添加表鎖定提示的問題,建議使用TransactionScope隔離級別的解決方案。這很好,但在我的情況下,每個事務都是爲了一個原子服務調用的目的,我不知道這會起作用。例如,如果我需要在不鎖定的情況下讀取一個表,並且髒讀可能沒有問題,請轉至另一個讀取以進行更新,然後執行更新。我不想爲整個交易設置Read Uncommitted,只有一個特定的閱讀,那麼我該怎麼辦?
是不是有一個擴展我能實現,這將讓我補充表鎖提示,而無需使用視圖或存儲過程,或使用datacontext.ExecuteQuery(「我在這裏的原始的SQL字符串」)