代码之家  ›  专栏  ›  技术社区  ›  greenoldman

是否可以使用EF Core进行特别的部分更新?

  •  0
  • greenoldman  · 技术社区  · 9 月前

    我发现了这样一篇关于部分更新的帖子: What is the best way to perform partial updates in EF core and never update certain properties?

    我的情况如下——我有一个表,比如Person with Id,Name,LastName,DateOfBirth等。我需要花很多时间更新所有字段,这没有问题。

    但也有一些时候我需要非常窄的更新,我手头有Id,没有其他东西,我只想设置字段LastSeen。

    获取完整记录只是为了更改一个字段对我来说是浪费,使用原始SQL是可能的,但另一方面看起来很难看。

    有没有办法保持在EF Core的“限制”范围内,并在给定时刻执行部分更新?

    2 回复  |  直到 9 月前
        1
  •  3
  •   Jineapple    9 月前

    是的,从EF Core 7开始,您可以使用ExecuteUpdate(异步)和ExecuteDelete(异步)方法:

    https://learn.microsoft.com/en-us/ef/core/saving/execute-insert-update-delete

    context.Persons
      .Where(p => p.Id == id)
      .ExecuteUpdate(setters => setters.SetProperty(p => p.LastSeen, DateTime.Now));
    
        2
  •  1
  •   Guru Stron    9 月前

    由于EF Core 7,您可以使用 ExecuteUpdate :

    ctx.Persons
       .Where(p => p.Id == id)
       .ExecuteUpdate(setters => setters.SetProperty(b => b.LastSeen, DateTime.UtcNow));
    

    执行更新 ExecuteDelete 是一种将数据保存到数据库的方法,而无需使用EF的传统更改跟踪和 SaveChanges() 方法

    查询将直接转换为SQL,而无需向客户端获取数据。