myesn

myEsn2E9

hi
github

ABP: EF Core AsNoTracking()

閱讀 Abp Unit Of Work 文件後得知以下方法類型會被視為一個 unit of work:

  • ASP.NET Core MVC 控制器操作。
  • ASP.NET Core Razor 頁面處理程序。
  • 應用服務方法。
  • 存儲庫方法。

對於這些方法,UOW 會自動啟動,除非周圍(環境)UOW 已經在運行。

簡單來說,就是上面 4 種類型的方法在執行前會自動開啟事務,並在執行完無異常後,自動提交數據庫事務。
這也就意味著,在 GetListAsync 或者 GetAsync 方法中,如果變更了實體屬性的值,即使沒有調用 UpdateAsync 等來更新實體,在方法被成功執行後,他也會將變更同步到數據庫中,這是事務的功勞。
所以,我們要禁用 EFCore 的實體變更追踪功能,防止在 ReadOnly 的方法中無意的變更了實體的值,禁用的方法是被 ABP 封裝過的,參考:https://github.com/abpframework/abp/issues/17487

不過,確實,就算是在 ReadOnly 的方法中查詢數據,也不應該去變更實體屬性的值,而是變更 dto 的值,這樣,也不需要 DisableTracking 了。

參考#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。