myesn

myEsn2E9

hi
github

ABP: EF Core AsNoTracking()

阅读 Abp Unit Of Work 文档后得知以下方法类型会被视为一个 unit of work:

  • ASP.NET Core MVC Controller Actions.
  • ASP.NET Core Razor Page Handlers.
  • Application service methods.
  • Repository methods.

对于这些方法,UOW 会自动启动,除非周围(环境)UOW 已经在运行。

简单来说,就是上面 4 种类型的方法在执行前会自动开启是巨款事务,并在执行完无异常后,自动提交数据库事务。
这也就意味着,在 GetListAsync 或者 GetAsync 方法中,如果变更了实体属性的值,即使没有调用 UpdateAsync 等来更新实体,在方法被成功执行后,他也会将变更同步到数据库中,这是事物的功劳。
所以,我们要禁用 EFCore 的实体变更追踪功能,防止在 ReadOnly 的方法中无意的变更了实体的值,禁用的方法是被 ABP 封装过的,参考:https://github.com/abpframework/abp/issues/17487

不过,确实,就算是在 ReadOnly 的方法中查询数据,也不应该去变更实体属性的值,而是变更 dto 的值,这样,也不需要 DisableTracking 了。

参考#

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。