【问题标题】:How to increment a value using one command using entity framework如何使用实体框架使用一个命令来增加值
【发布时间】:2022-08-08 15:41:01
【问题描述】:

如何将此 sql 查询转换为 EF linq 命令

\"update dbo.table set col1= col1 + 1 where Id = 27\" 

我想使用一个命令执行此查询以避免并发问题 如果另一个客户同时修改记录

我正在寻找使用 EF 但在一个命令中执行此操作

我试过这个,但我正在寻找更好的解决方案:

context.table1.FromSqlInterpolated($\"update dbo.table  set col1= col1+ 1 where Id=27\").FirstOrDefaultAsync();
  • 我只能建议可以做到这一点的第三方扩展。
  • @SvyatoslavDanyliv 我会接受的

标签: entity-framework entity-framework-core


【解决方案1】:

我建议使用linq2db.EntityFrameworkCore(请注意,我是创建者之一)

然后你可以轻松地做到这一点:

await context.table1.Where(x => x.Id == 27)
   .Set(x => x.Col1, prev => prev.Col1 + 1)
   .UpdateAsync();

【讨论】:

  • 有趣的。这实际上会转化为单个UPDATE,还是仍然是SELECT,然后是UPDATE
  • 它在一个UPDATE 语句中完全翻译。
【解决方案2】:

update a column without first querying 有很多方法,但是你遇到的问题是更新是基于现有值的。

实体框架无法帮助您。您只能使用直接 SQL 语句做您想做的事。

【讨论】:

    【解决方案3】:

    如果您想确保在读取和更新值之间不会发生其他更改,那么即使是原始 SQL 语句也应该在事务中执行。这是一条 SQL 语句,但数据库仍然需要读取值、递增和存储。

    【讨论】:

    • 我正在使用 sql server 并且该查询是原子完成的,不使用任何事务或锁定
    猜你喜欢
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多