Asp.net-Mvc

如何在 .net 的 MVC 中創建安全的每個 Web 請求事務?

  • May 20, 2013

我需要在它處理的每個 Web 請求中使我的整個應用程序都具有事務性。

我需要啟動事務,如果控制器中沒有異常,則送出它。否則,回滾。

到目前為止,我有以下實現:

  • 首先,我在控制器上創建事務作為依賴項。
  • 然後,我做我的控制器/服務/儲存庫/其他工作。
  • 最後,主要的抽象控制器類執行它的OnActionExecuted方法,我要麼送出它,要麼不送出。

以下是我使用的技術列表:

  • MVC 4
  • 忍者
  • 自動映射器
  • 服務模式

現在,我想知道死鎖是怎麼回事?當同時處理兩個 Web 請求時會發生什麼,並且他們將獲得使用兩個儲存庫(連結到他們的DataContext實例)的權利,這意味著數據庫中的兩個表

例如:一個請求首先要讀取 tableTable1然後Table2,同時另一個請求想要使用Table2然後使用Table1

我應該怎麼辦?

好的,我已經意識到這個問題的一些解決方案:

  • 第一個是擁有所有表的列表並通過該列表訪問它們。因此,如果上下文都需要這兩個範例,Table2則永遠不會訪問範例Table1,並且不會發生死鎖。
  • 第二個是創建一個惰性 IO 系統來跟踪所有必要的更改(比如添加一個項目,檢索它的 id 並在其他地方使用它)。但它似乎很難建構。
  • 另一種方法是在每個數據庫請求開始時為其創建應用程序級鎖,並在結束時釋放它。該解決方案完全沒有死鎖,但它僅適用於低負載系統。

您可以處理事務的開始和停止以呼叫 DB 請檢查此

並發執行這兩條語句時如何防止EntityFramework死鎖

希望這有幫助

引用自:https://stackoverflow.com/questions/15250715