Abp 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 も必要ありません。