C#, EntityFramework, LINQ TransactionScopeOption.Suppress

在使用 TransactionScope進行Transaction管控時, 在其區塊所有資料的異動和資料讀取, 都會受到Lock影響, 若希望其區塊有一個不同DbContext要讀取資料, 但因Table已被別的DbContext進行資料異動而Lock時, 可以在要讀取資料的程式碼外, 包上下面TransactionScope, 他將會獨立查詢資料

using (TransactionScope tss = new TransactionScope(TransactionScopeOption.Suppress))
{

}

TransactionScopeOption 是一個列舉(enum)類型,用於指定 TransactionScope 的行為選項。它定義了以下四個選項:

  1. Required(預設選項):
    • 這個選項表示當前代碼塊需要參與到已經存在的事務中。如果當前代碼塊在進入事務範圍時已經存在一個事務,則它將參與到該事務中。如果事務不存在,則會創建一個新的事務。
    • 如果當前代碼塊成功完成,則事務將提交;如果當前代碼塊拋出異常,事務將回滾。
  2. RequiresNew
    • 這個選項表示當前代碼塊需要創建一個新的獨立事務,並參與到該新事務中。無論是否存在其他事務,都將創建一個新的事務並參與其中。
    • 當前代碼塊的操作將在新的事務內執行,並且無論成功與否,都不會影響到其他事務。
  3. Suppress
    • 這個選項表示當前代碼塊將禁用事務。也就是說,當前代碼塊的操作將不受事務的約束,即使其他事務正在進行,也不會參與到任何事務中。
    • 當前代碼塊的操作將獨立執行,不會影響到其他事務。
  4. NotAllowed
    • 這個選項表示當前代碼塊不允許參與到事務中。如果當前代碼塊嘗試進入事務範圍,將引發異常。
    • 通常用於明確禁止某些代碼塊參與到事務中的情況。

使用這些不同的選項,你可以根據你的應用程序需求來管理事務,以確保數據的一致性和可靠性。不同的選項允許你定義事務的範圍和行為方式,以適應不同的情況。

留言

這個網誌中的熱門文章

ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務

Oracle 例外控制(Exception Control)

Oracle 工作排程 DBMS_JOB 筆記