插入或更新的IStorageable<T>,AsUpdateable之后的Where不起作用 返回

SqlSugar 沟通中
9 492

image.png

插入或更新的IStorageable<T>AsUpdateable后  .Where加条件加不上。无论加几个条件,生成的SQL语句都只有默认的主键条件。(数据库Oracle 11g,SqlSugar版本5.1.4.80)

热忱回答9

  • fate sta fate sta VIP0
    2023/11/11

    这种是实体更新不是用where的

    0 回复
  • fate sta fate sta VIP0
    2023/11/11

    并且版本号有自带的功能

    0 回复
  • fate sta fate sta VIP0
    2023/11/11

    看一下文档更新 :乐观锁

    0 回复
  • fate sta fate sta VIP0
    2023/11/11
    .Updateable(new ULockEntity()
        {
            Id = id,
            Name = "newname",
            Ver = 1551128313597136896  //版本字段会自动更新
        }).ExecuteCommandWithOptLock(true)

    实体配置后会自动处理版本号

    0 回复
  • fate sta fate sta VIP0
    2023/11/11

    你更新就不需要加where

    0 回复
  • Monody Monody VIP0
    2023/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 fate sta VIP0
    2023/11/11

    一个是批量一个单条走的逻辑不一样

    0 回复
  • fate sta fate sta VIP0
    2023/11/11
    var updateObj=x.UpdateList.FirstOrDefault()?.Item;
    if(updateObj!=null)
      走单条更新逻辑

    你可以这样用通过X使用要更新对象 用updateable

    0 回复
  • Monody Monody VIP0
    2023/11/13

    @fate sta:大佬好,最新进展是,我采用了文档中的乐观锁,在调用

    image.png

    image.png

    时,报错:

    image.png

    我很确定Storageable(a)中的参数a只有一个对象而不是List。


    我已通过这样的方式解决:

    image.png

    但我想,是否是因为Storageable只支持批量不支持单条,即使只有一个对象,也会当成List来处理呢?

    0 回复