UpdateableByObject动态更新问题 返回

SqlSugar 沟通中
54 478
该叫什么 fry 发布于1个月前
悬赏:0 飞吻

动态更新,只更新了部分字段,其他字段也更新成了null



热忱回答54

  • fry fry VIP0
    1个月前

    修改的时候,审计特性中有些是要自动更新的(基类中的)

    0 回复
  • fate sta fate sta VIP0
    1个月前

    AOP不是可以添加值吗。。

    0 回复
  • fate sta fate sta VIP0
    1个月前

    UpdateableByObject

     AOP是有效的

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:Aop是可以了,目前添加,删除,列表测试ok了,修改比较独特,一些审计字段必须要指明才能更新


    问题:更新条件未能加上自动过滤器,且没有更新审计字段的(更新时间,更新人)

    ScreenShot_2025-11-07_110118_510.png



    0 回复
  • fate sta fate sta VIP0
    1个月前
    提供具体DEMO
    0 回复
  • fate sta fate sta VIP0
    1个月前

    按我的规格写一个 无封装硬编码的DEMO


    0 回复
  • fry fry VIP0
    1个月前

    @fate staimage.png


    image.png

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:更新的时候Aop是进去了,且给修改人赋值了,但是更新后没有变,且自动过滤器条件没有带上去


    更新必须指定更新的列(审计字段也必须指定),过滤条件没带上

    0 回复
  • fate sta fate sta VIP0
    1个月前

    这样沟通很累,你搞DEMO就3分钟的时间。

    0 回复
  • fate sta fate sta VIP0
    1个月前

    搞个3个字段的表。拿我之前给你的代码复制一下。能重现的发出来

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:aop是赋值了,但是没有更新过来,创建人忽略了更新,修改人忽略了添加,仅此而已,而且更新的时候过滤器没有加上去,删除和查询是加了过滤器的

    0 回复
  • fate sta fate sta VIP0
    1个月前

    image.png



    过滤器这个功能目 前updatebyobject 好像没有enablequeryfilter这个配置,我需要加一下。

    至于更新为NULL必须DEMO

    aop肯定有效的,如果你认无效可能我们之间理解有差异,还是需要提供DEMO

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:过滤器的问题你优化一下,

    更新的时候如果只更新部分业务字段(不是审计字段),那么其他业务字段也会更新成null,这个问题要强制配置更新特定的字段,你那边能优化最好



    基类中的字段都是审计字段,都是通过aop赋值,目前aop是有效果的,这个不争论了

    0 回复
  • fate sta fate sta VIP0
    1个月前

    SqlSugarCore 5.1.4.209-preview16


    过滤器UpdateByObject用法


    db.UpdateableByObject(userInfo).PageSize(1).EnableQueryFilter().ExecuteCommand();


    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:更新的过滤不能全局开启吗,万一要多租户,每个更新都要写一遍?查询和删除为什么可以实现过滤?

    0 回复
  • fate sta fate sta VIP0
    1个月前

    @fry:批量更新语法限制没办法全局开启

    0 回复
  • fate sta fate sta VIP0
    1个月前

    还有种办法就是你先查询,查询出来,然在更新。

    0 回复
  • fate sta fate sta VIP0
    1个月前

    这样查询会自带过滤器

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:更新部分业务字段的时候可以优化一下,传什么字段就更新什么字段和审计字段,其他业务字段的值不动

    0 回复
  • fate sta fate sta VIP0
    1个月前

    GUID类型更新和删 除不带过滤器也是安全的。因为你拿不到其他用户的GUID

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:我这边还有一个软删除的过滤和租户过滤两个

    0 回复
  • fate sta fate sta VIP0
    1个月前

     db.UpdateableByObject(new object()).IgnoreNullColumns().ExecuteCommand();

     这样就可以了NULL的不更新

    0 回复
  • fate sta fate sta VIP0
    1个月前

    更新是根据主键来的,你前端不可能传过来删 除的数据。

    0 回复
  • fate sta fate sta VIP0
    1个月前

    你这个表结构根本不需要过滤器。因为是GUID,前端不可能传过来删 除的GUID

    0 回复
  • fate sta fate sta VIP0
    1个月前

    guid又不是可以随意构造的。所以是安全的。只有INT 这种才需要 删 改加过滤器

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:主键是带的,而且是单条删除,所以理论上只要查询有过滤,租户A只能看到A的数据,修改也只能修改A的数据,这样看起来是没有问题,但是程序不是要严谨一些

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:主键你没有办法约束别人就用guid,万一别人用自增Int呢?

    0 回复
  • fate sta fate sta VIP0
    1个月前
    db.UpdateableByObject(userInfo).PageSize(1).EnableQueryFilter().ExecuteCommand();


    那就按这个语法来。只能这样处理

    0 回复
  • fate sta fate sta VIP0
    1个月前

    批量更新要加过滤器只能这样写。没其他方案。

    或者你像EF一样先查询在更新,查询带有带滤器。

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:我这个是单个更新,不是批量更新

    0 回复
  • fry fry VIP0
    1个月前

    @fate staimage.png这个能改一下吗?

    0 回复
  • fry fry VIP0
    1个月前

    删除的监控

    ScreenShot_2025-11-07_110633_008.png

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:动态更新按需更新字段,这个能调整一下吗?

    0 回复
  • fate sta fate sta VIP0
    1个月前

    @fry: 什么功能描述清楚。一个功能发一个贴子。现在全乱套了。不清楚你的需求

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:比如 动态创建的表,student表,包含业务字段 (name,age,remark) 还有一些审计字段(Id,CreateId,CreateTime,UpdateId,UpdateTime,IsDeleted)

    当动态修改表单条数据的时候,只修改name字段的值,age,remark,CreateId,CreateTime 这些字段的值都变了,这是什么原因?

    0 回复
  • fate sta fate sta VIP0
    1个月前

     db.UpdateableByObject(new object()).IgnoreNullColumns().ExecuteCommand();

    加上IgnoreNullColumns 这样  null的不更新。

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:他们有值,把原来的值更新成null了

    0 回复
  • fate sta fate sta VIP0
    1个月前

    提供具体DEMO吧。实现没办法脑补你的需求。

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:我说的很详细了,更新一个字段的值,结果其他字段的值也更新成null了,这个很难理解吗?

    0 回复
  • fate sta fate sta VIP0
    1个月前

     db.UpdateableByObject(userInfo).UpdateColumns("Name").ExecuteCommand(); 

    这样只更新Name

    你说的太片面了。我只能慢慢核对。可能不是你想要的。

    0 回复
  • fate sta fate sta VIP0
    1个月前

    有具体代码就不需要浪费无用沟通时间



    0 回复
  • fry fry VIP0
    1个月前

    @fate stadb.UpdateableByObject(userInfo).ExecuteCommandAsync(); 

    0 回复
  • fate sta fate sta VIP0
    1个月前

    这样是所有字段都更新。

    0 回复
  • fate sta fate sta VIP0
    1个月前

     你传NULL也会更新成NULL

    0 回复
  • fate sta fate sta VIP0
    1个月前

    你要只更新一个字段就这样

     db.UpdateableByObject(userInfo).UpdateColumns("Name").ExecuteCommand(); 

    0 回复
  • fate sta fate sta VIP0
    1个月前

    如果你想做到只更新userinfo修改的字段。那么要用跟踪用法。

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:基类中的审计字段也必须加上去吗?.UpdateColumns("审计字段A",“审计字段B”)  ?????   有基类了为什么还要再弄一遍?.

    0 回复
  • fate sta fate sta VIP0
    1个月前

    @fry:这个自个定逻辑吧,你指定什么是什么。

    0 回复
  • fate sta fate sta VIP0
    1个月前

    对ORM来说根本不知道你基类中字段是干嘛的。

    0 回复
  • fate sta fate sta VIP0
    1个月前

    比如创建时间,创建人,他就不需要修改。

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:好吧,这个我这边处理

    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:创建人添加了

    IsOnlyIgnoreUpdate特性,你底层应该是可以拿到这个特性的值


    0 回复
  • fry fry VIP0
    1个月前

    @fate sta:主键标记了PrimaryKey,有这个特性,这个字段自动要忽略更新

    0 回复
  • fry fry VIP0
    2周前

    @fate sta:基类中的字段带有

    SugarColumn特性,特性的值你那边是可以拿到的,针对添加,修改,删除可以有针对性行的处理


    0 回复