Asp.net-Mvc
如何在 .net 的 MVC 中創建安全的每個 Web 請求事務?
我需要在它處理的每個 Web 請求中使我的整個應用程序都具有事務性。
我需要啟動事務,如果控制器中沒有異常,則送出它。否則,回滾。
到目前為止,我有以下實現:
- 首先,我在控制器上創建事務作為依賴項。
- 然後,我做我的控制器/服務/儲存庫/其他工作。
- 最後,主要的抽象控制器類執行它的
OnActionExecuted方法,我要麼送出它,要麼不送出。以下是我使用的技術列表:
- MVC 4
- 忍者
- 自動映射器
- 服務模式
現在,我想知道死鎖是怎麼回事?當同時處理兩個 Web 請求時會發生什麼,並且他們將獲得使用兩個儲存庫(連結到他們的
DataContext實例)的權利,這意味著數據庫中的兩個表?例如:一個請求首先要讀取 table
Table1然後Table2,同時另一個請求想要使用Table2然後使用Table1。我應該怎麼辦?
好的,我已經意識到這個問題的一些解決方案:
- 第一個是擁有所有表的列表並通過該列表訪問它們。因此,如果上下文都需要這兩個範例,
Table2則永遠不會訪問範例Table1,並且不會發生死鎖。- 第二個是創建一個惰性 IO 系統來跟踪所有必要的更改(比如添加一個項目,檢索它的 id 並在其他地方使用它)。但它似乎很難建構。
- 另一種方法是在每個數據庫請求開始時為其創建應用程序級鎖,並在結束時釋放它。該解決方案完全沒有死鎖,但它僅適用於低負載系統。
您可以處理事務的開始和停止以呼叫 DB 請檢查此
並發執行這兩條語句時如何防止EntityFramework死鎖
希望這有幫助