簡體   English   中英

TransactionScope需要多個隔離級別嗎?

[英]Multiple isolation levels needed for a TransactionScope?

我遇到了我的應用程序中需要使用表鎖定提示或將事務隔離級別設置為默認讀取提交以外的其他級別的情況,以解決死鎖問題。 我使用的是面向服務的體系結構,每個服務調用均作為原子操作運行,而Linq To Sql則充當輕量級DAL。 每個服務調用都調用我的業務層,並聲明一個新的事務,如下所示:

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字符串”)

我認為最好的答案是使用多個事務,並對一批僅讀取“臟”的事務進行批處理,而對需要讀取的更新進行另一批處理。 如果有任何信息需要交叉批處理,請在內存緩存中為該數據設置一個臨時項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM