UpdateableByObject动态更新问题 返回
动态更新,只更新了部分字段,其他字段也更新成了null


热忱回答(54)
-
fry VIP0
1个月前修改的时候,审计特性中有些是要自动更新的(基类中的)
0 回复 -
fate sta VIP0
1个月前AOP不是可以添加值吗。。
0 回复 -
fate sta VIP0
1个月前UpdateableByObject
AOP是有效的
0 回复 -
fry VIP0
1个月前@fate sta:Aop是可以了,目前添加,删除,列表测试ok了,修改比较独特,一些审计字段必须要指明才能更新
问题:更新条件未能加上自动过滤器,且没有更新审计字段的(更新时间,更新人)
0 回复 -
fate sta VIP0
1个月前提供具体DEMO0 回复 -
fate sta VIP0
1个月前按我的规格写一个 无封装硬编码的DEMO
0 回复 -
fry VIP0
1个月前@fate sta:

0 回复 -
fry VIP0
1个月前@fate sta:更新的时候Aop是进去了,且给修改人赋值了,但是更新后没有变,且自动过滤器条件没有带上去
更新必须指定更新的列(审计字段也必须指定),过滤条件没带上
0 回复 -
fate sta VIP0
1个月前这样沟通很累,你搞DEMO就3分钟的时间。
0 回复 -
fate sta VIP0
1个月前搞个3个字段的表。拿我之前给你的代码复制一下。能重现的发出来
0 回复 -
fry VIP0
1个月前@fate sta:aop是赋值了,但是没有更新过来,创建人忽略了更新,修改人忽略了添加,仅此而已,而且更新的时候过滤器没有加上去,删除和查询是加了过滤器的
0 回复 -
fate sta VIP0
1个月前
过滤器这个功能目 前updatebyobject 好像没有enablequeryfilter这个配置,我需要加一下。
至于更新为NULL必须DEMO
aop肯定有效的,如果你认无效可能我们之间理解有差异,还是需要提供DEMO
0 回复 -
fry VIP0
1个月前@fate sta:过滤器的问题你优化一下,
更新的时候如果只更新部分业务字段(不是审计字段),那么其他业务字段也会更新成null,这个问题要强制配置更新特定的字段,你那边能优化最好
基类中的字段都是审计字段,都是通过aop赋值,目前aop是有效果的,这个不争论了
0 回复 -
fate sta VIP0
1个月前SqlSugarCore 5.1.4.209-preview16
过滤器UpdateByObject用法
db.UpdateableByObject(userInfo).PageSize(1).EnableQueryFilter().ExecuteCommand();
0 回复 -
fry VIP0
1个月前@fate sta:更新的过滤不能全局开启吗,万一要多租户,每个更新都要写一遍?查询和删除为什么可以实现过滤?
0 回复 -
fate sta VIP0
1个月前@fry:批量更新语法限制没办法全局开启
0 回复 -
fate sta VIP0
1个月前还有种办法就是你先查询,查询出来,然在更新。
0 回复 -
fate sta VIP0
1个月前这样查询会自带过滤器
0 回复 -
fry VIP0
1个月前@fate sta:更新部分业务字段的时候可以优化一下,传什么字段就更新什么字段和审计字段,其他业务字段的值不动
0 回复 -
fate sta VIP0
1个月前GUID类型更新和删 除不带过滤器也是安全的。因为你拿不到其他用户的GUID
0 回复 -
fry VIP0
1个月前@fate sta:我这边还有一个软删除的过滤和租户过滤两个
0 回复 -
fate sta VIP0
1个月前db.UpdateableByObject(new object()).IgnoreNullColumns().ExecuteCommand();
这样就可以了NULL的不更新
0 回复 -
fate sta VIP0
1个月前更新是根据主键来的,你前端不可能传过来删 除的数据。
0 回复 -
fate sta VIP0
1个月前你这个表结构根本不需要过滤器。因为是GUID,前端不可能传过来删 除的GUID
0 回复 -
fate sta VIP0
1个月前guid又不是可以随意构造的。所以是安全的。只有INT 这种才需要 删 改加过滤器
0 回复 -
fry VIP0
1个月前@fate sta:主键是带的,而且是单条删除,所以理论上只要查询有过滤,租户A只能看到A的数据,修改也只能修改A的数据,这样看起来是没有问题,但是程序不是要严谨一些
0 回复 -
fry VIP0
1个月前@fate sta:主键你没有办法约束别人就用guid,万一别人用自增Int呢?
0 回复 -
fate sta VIP0
1个月前db.UpdateableByObject(userInfo).PageSize(1).EnableQueryFilter().ExecuteCommand();那就按这个语法来。只能这样处理
0 回复 -
fate sta VIP0
1个月前批量更新要加过滤器只能这样写。没其他方案。
或者你像EF一样先查询在更新,查询带有带滤器。
0 回复 -
fry VIP0
1个月前@fate sta:我这个是单个更新,不是批量更新
0 回复 -
fry VIP0
1个月前@fate sta:
这个能改一下吗?0 回复 -
fry VIP0
1个月前删除的监控
0 回复 -
fry VIP0
1个月前@fate sta:动态更新按需更新字段,这个能调整一下吗?
0 回复 -
fate sta VIP0
1个月前@fry: 什么功能描述清楚。一个功能发一个贴子。现在全乱套了。不清楚你的需求
0 回复 -
fry VIP0
1个月前@fate sta:比如 动态创建的表,student表,包含业务字段 (name,age,remark) 还有一些审计字段(Id,CreateId,CreateTime,UpdateId,UpdateTime,IsDeleted)
当动态修改表单条数据的时候,只修改name字段的值,age,remark,CreateId,CreateTime 这些字段的值都变了,这是什么原因?
0 回复 -
fate sta VIP0
1个月前db.UpdateableByObject(new object()).IgnoreNullColumns().ExecuteCommand();
加上IgnoreNullColumns 这样 null的不更新。
0 回复 -
fry VIP0
1个月前@fate sta:他们有值,把原来的值更新成null了
0 回复 -
fate sta VIP0
1个月前提供具体DEMO吧。实现没办法脑补你的需求。
0 回复 -
fry VIP0
1个月前@fate sta:我说的很详细了,更新一个字段的值,结果其他字段的值也更新成null了,这个很难理解吗?
0 回复 -
fate sta VIP0
1个月前db.UpdateableByObject(userInfo).UpdateColumns("Name").ExecuteCommand();
这样只更新Name
你说的太片面了。我只能慢慢核对。可能不是你想要的。
0 回复 -
fate sta VIP0
1个月前有具体代码就不需要浪费无用沟通时间
0 回复 -
fry VIP0
1个月前@fate sta:db.UpdateableByObject(userInfo).ExecuteCommandAsync();
0 回复 -
fate sta VIP0
1个月前这样是所有字段都更新。
0 回复 -
fate sta VIP0
1个月前你传NULL也会更新成NULL
0 回复 -
fate sta VIP0
1个月前你要只更新一个字段就这样
db.UpdateableByObject(userInfo).UpdateColumns("Name").ExecuteCommand();
0 回复 -
fate sta VIP0
1个月前如果你想做到只更新userinfo修改的字段。那么要用跟踪用法。
0 回复 -
fry VIP0
1个月前@fate sta:基类中的审计字段也必须加上去吗?.UpdateColumns("审计字段A",“审计字段B”) ????? 有基类了为什么还要再弄一遍?.
0 回复 -
fate sta VIP0
1个月前@fry:这个自个定逻辑吧,你指定什么是什么。
0 回复 -
fate sta VIP0
1个月前对ORM来说根本不知道你基类中字段是干嘛的。
0 回复 -
fate sta VIP0
1个月前比如创建时间,创建人,他就不需要修改。
0 回复 -
fry VIP0
1个月前@fate sta:好吧,这个我这边处理
0 回复 -
fry VIP0
1个月前@fate sta:创建人添加了
IsOnlyIgnoreUpdate特性,你底层应该是可以拿到这个特性的值
0 回复 -
fry VIP0
1个月前@fate sta:主键标记了PrimaryKey,有这个特性,这个字段自动要忽略更新
0 回复 -
fry VIP0
2周前@fate sta:基类中的字段带有
SugarColumn特性,特性的值你那边是可以拿到的,针对添加,修改,删除可以有针对性行的处理
0 回复