c# - 在一个原子操作中通过 linq2db 检查更新行

标签 c# sql database linq2db

MS SQL 数据库表有 timestamp 字段,其值在更新行后发生变化。 在更新之前,我想检查该行是否已从其他服务更改。

我可以通过将内存中对象的时间戳值与数据库表中的值进行比较来做到这一点。

我可以通过 linq2db 在一次原子操作中完成吗?

无需检查即可工作:

db.Update(product);

这三个查询不起作用:

db.Products.Where(p => p.timestamp == product.timestamp).Update(p => p, product);
db.Products.Update(p => p.timestamp == product.timestamp, p => product );
db.Where<DB, Product, DB>(p => p.timestamp == product.timestamp).Update(product);

我想像这样执行 sql 脚本:

update Products
set ...-- all fields
where Id = @id and Timestamp = @timestamp

最佳答案

我想在这里留下一个答案,因为 linq2db 是一个很棒的工具,我希望它更受欢迎。

在您的情况下,您需要单独设置实体的所有字段,如下所示:

db.Products
  .Where(p => p.timestamp == product.timestamp)
  .Set(p => p.Name, product.Name)
  .Set(p => p.UnitPrice, product.UnitPrice)
  // ...
  .Update();

关于c# - 在一个原子操作中通过 linq2db 检查更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25805430/

相关文章:

MySQL Not Null 命令没有执行任何操作

php - 使用户输入对数据库安全的最佳功能是什么?

sql - 数据库设计帮助 : Whose kid is this anyway

c# - 帮助使用 lambda 表达式

c# - Entity Framework 级联删除 - FOREIGN KEY 约束

c# - LINQ:仅在值不为空时添加 where 子句

sql - 然后将查询添加到子查询不会产生任何结果

c# - 程序化 Log4Net 配置复制条目

sql - 在角色表的用户表中包含管理员角色

database - 偏移/限制页面/大小转换