【问题标题】:How to select & update a single field using EF Core 3.1如何使用 EF Core 3.1 选择和更新单个字段
【发布时间】:2023-03-21 19:11:02
【问题描述】:

如何实现此功能,例如:

UPDATE BlogSite
SET PostCount = PostCount + 1
WHERE BlogId = @BlogId

基于实体框架 3.1 (MySQL)

【问题讨论】:

    标签: .net-core ef-core-3.1


    【解决方案1】:

    除了@sadullah 的回答,

    为了使其具有原子性和高性能,我建议您将其包装为事务,因为您有两个数据库操作(选择、更新)。此外,您可能还需要考虑使用 efcore 函数的异步版本。

    using (var transaction = await _yourDbContext.Database.BeginTransactionAsync())
    {
        var entry = await _yourDbContext.BlogSite.FindAsync(*);
        entry.PostCount++;
        await _yourDbContext.SaveChangesAsync();
    
        await transaction.CommitAsync();
    }
    

    【讨论】:

    • 是的,这是我目前的解决方案,但在一行代码中是否有更简单的方法。例如:db.Set().Where(u => u.id == 1).UpdateFromQuery(x => new Post { Count = x.Count + 1 });
    • 我用过这个包:Z.EntityFramework.Extensions.EFCore
    • 是的,有一些方法可以通过使用 3rd 方依赖项使用一行代码来处理它。我想展示如何在没有第三方依赖的情况下处理它。但是,您可以简单地以通用方式包装上述方法,并且可以在任何您想要的地方使用。 (顺便说一下,您提到的软件包具有专有许可证并且不是开源的,这意味着我们不知道他们在UpdateFromQuery 方法下使用什么方法来处理这个问题。请参阅:github.com/zzzprojects/EntityFramework-Extensions/tree/master/…
    • hiahia,它不是开源的,这是一个坏消息。你还有其他类似的 EF 扩展吗?
    • 我不熟悉任何 3rd 方 EF 扩展。但是,我相信您可以在互联网上找到满足您需求的东西。例如,查看这个官方的 ms 文档页面:docs.microsoft.com/en-us/ef/core/extensions 此外,似乎你不是唯一一个在 stackoverflow 中提出这个问题的人。:stackoverflow.com/questions/42345300/…
    【解决方案2】:
    // I assume your DBContext object is _db.
    
    var blogSite=_db.BlogSite.Find(BlogId);
    blogSite.PostCount++;
    _db.SaveChanges();
    

    【讨论】:

      猜你喜欢
      • 2020-08-29
      • 2021-09-05
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2019-11-26
      相关资源
      最近更新 更多