插入或更新的IStorageable<T>,AsUpdateable之后的Where不起作用 返回
插入或更新的IStorageable<T>AsUpdateable后 .Where加条件加不上。无论加几个条件,生成的SQL语句都只有默认的主键条件。(数据库Oracle 11g,SqlSugar版本5.1.4.80)
热忱回答(9)
-
fate sta VIP02023/11/11
这种是实体更新不是用where的
0 回复 -
fate sta VIP02023/11/11
并且版本号有自带的功能
0 回复 -
fate sta VIP02023/11/11
看一下文档更新 :乐观锁
0 回复 -
fate sta VIP02023/11/11
.Updateable(
new
ULockEntity()
{
Id = id,
Name =
"newname"
,
Ver = 1551128313597136896
//版本字段会自动更新
}).ExecuteCommandWithOptLock(
true
)
实体配置后会自动处理版本号
0 回复 -
fate sta VIP02023/11/11
你更新就不需要加where
0 回复 -
Monody VIP02023/11/11
@fate sta:感谢大佬回复。您说的这种乐观并发方式我了解。但我接手的代码就是通过下面这种方式来手动处理Version的:
if (await _db.Updateable(a)
.Where(b=> b.Id== a.Id) // Updateable帶條件會去掉默認的主鍵條件,須手動補上
.Where(b=> b.Version == oldVersion)
.ExecuteCommandAsync() != 1)
{
throw new Exception();
}
且生成的Sql语句中的条件没有问题。
但使用了插入或更新后,条件就加不上了。
我会建议我们的项目使用您说的方式来处理Version。但如果IStorageable.AsUpdateable之后在设计上就不允许继续 .Where,能否直接让我们点儿不出来呢
0 回复 -
fate sta VIP02023/11/11
一个是批量一个单条走的逻辑不一样
0 回复 -
fate sta VIP02023/11/11
var updateObj=x.UpdateList.FirstOrDefault()?.Item; if(updateObj!=null) 走单条更新逻辑
你可以这样用通过X使用要更新对象 用updateable
0 回复 -
Monody VIP02023/11/13
@fate sta:大佬好,最新进展是,我采用了文档中的乐观锁,在调用
时,报错:
我很确定Storageable(a)中的参数a只有一个对象而不是List。
我已通过这样的方式解决:
但我想,是否是因为Storageable只支持批量不支持单条,即使只有一个对象,也会当成List来处理呢?
0 回复