MS SQL数据库表具有时间戳字段,该值在更新行后更改。 在更新之前,我想检查该行是否已从其他服务更改。
我可以通过比较内存中对象的时间戳值和数据库表中的值来实现。
我可以通过 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-script:
update Products
set ...-- all fields
where Id = @id and Timestamp = @timestamp
答案 0 :(得分:2)
我想在这里留下答案,因为linq2db是一个很棒的工具,我希望它更受欢迎。
在您的情况下,您需要单独设置实体的所有字段,如下所示:
db.Products
.Where(p => p.timestamp == product.timestamp)
.Set(p => p.Name, product.Name)
.Set(p => p.UnitPrice, product.UnitPrice)
// ...
.Update();