软删除的Aop处理和改进建议 返回
软删除的字段是IsDeleted,并且有删除时间和删除人,但是软删是更新,无法区分这个是编辑的修改还是软删除的修改,无法精准对删除时间和更新时间写入数据(删除人和更新人同理)
该功能属于软删和更新的区分,目前Aop区分不了(开启了Aop.DataExecuting区分并给审计字段赋值)
审计字段包含如下:
1:添加人,2:添加时间,3:修改人,4:修改时间,5:删除人,6:删除时间,7:IsDeleted
添加的时候 赋值 1和2
修改的时候 赋值 3和4
软删除的时候 赋值 5和6,7
现在区分不了修改和软删,导致 3,4,5,6这几个字段不能区分赋值
希望有办法改进一下
热忱回答(41)
-
fate sta VIP0
1个月前可以反射 isdeleted 的值。如果是true就是假删除
0 回复 -
fry VIP0
1个月前@fate sta:Aop.DataExecuting 这个当修改的时候,事件类型已经确认了,且是每个列都要进入一次,区分不出来
0 回复 -
fry VIP0
1个月前
@fate sta:这是修改的调试,区分不了,删除的时候也一样0 回复 -
fate sta VIP0
1个月前
这个对象里面不是有值吗
0 回复 -
fate sta VIP0
1个月前isdeleted是true那么就是假删除
0 回复 -
fate sta VIP0
1个月前false就是更新
0 回复 -
fry VIP0
1个月前@fate sta:这个调试的是删除,按道理应该是True,因为软删也是更新
0 回复 -
fate sta VIP0
1个月前@fry:提供代码吧。不然说不清楚。按我的风要提供DEMO
0 回复 -
fate sta VIP0
1个月前写个DEMO也就3分钟时间。
0 回复 -
fry VIP0
1个月前@fate sta:这个目前应该做不了,软删除很难分辨,你那边也应该有demo,可以自己试试怎么区分软删除
0 回复 -
fate sta VIP0
1个月前@fry:不清楚你的需求有疑问提供具体DEMO和你具体效果。
0 回复 -
fry VIP0
1个月前@fate sta:这个先放一下,审计字段少一些就可以了,目前无法做到软删除和更新的区分
0 回复 -
fate stay night VIP0
1个月前db.Aop.DataExecuting = (z,y) =>
{
if(逻辑)
var value=y.EntityValue.GetType().GetProperty("删除字段").GetValue(y.EntityValue);
};
0 回复 -
fate sta VIP0
1个月前如果还说不可以区分必须提供DEMO。不然大家说的不在一个频道
0 回复 -
fate sta VIP0
1个月前一个DEMO就3分钟我不知道你为什么不写一个。
0 回复 -
fry VIP0
1个月前@fate stay night:软删除的时候,sqlSugarProvider.Aop.DataExecuting = (obj, entityInfo) =>{
//每个行的每个列都会进来一次,而且软删除标记IsDeleted=false,根本判断不出来是
你这种 ------> var value=y.EntityValue.GetType().GetProperty("删除字段").GetValue(y.EntityValue); ----------> y.EntityValue中的IsDeleted=false,区分不出来
});
0 回复 -
fry VIP0
1个月前@fate sta:我是用组件开发,从0开始搭建项目太麻烦
0 回复 -
fate sta VIP0
1个月前@fry:新建一个控制台。还需要什么搭建。
0 回复 -
fate sta VIP0
1个月前
新建一个控制台就行了。写一个DEMO最多3分钟
0 回复 -
fate sta VIP0
1个月前可以在我这个基础上改。
0 回复 -
fry VIP0
1个月前@fate sta:这个问题先放一放吧,之前给你提过这个需求,最好是和更新,添加一样,能用枚举来区分,现在用反射搞不是特别好
0 回复 -
fry VIP0
1个月前@fate sta:你没看到它是false吗?false是更新,true才是软删除 而且这个aop处理的是数据更改前的值,IsDeleted肯定都是false啊
0 回复 -
fate sta VIP0
1个月前@fry:不能重现,你传的什么就是什么。
0 回复 -
fry VIP0
1个月前@fate sta:那就先这样
0 回复 -
fate sta VIP0
1个月前
0 回复 -
fate sta VIP0
1个月前
0 回复 -
fry VIP0
1个月前@fate sta:不是动态的更新了,是常规的更新(带条件的),我用的是这种,(软删除不用查了一遍再赋值)
0 回复 -
fry VIP0
1个月前@fate sta:即便能通过这种反射的方式能获取到值,也不会这样用,本生这个aop就是行事件,每个列都会进来一次,反射从性能上讲都说不过去,会有频繁的反射操作
0 回复 -
fate sta VIP0
1个月前表达式方式目 前只支持追加列。
建议你改成实体方式。
0 回复 -
fate sta VIP0
1个月前用updateByObject实现
0 回复 -
fate sta VIP0
1个月前你这种我在想想。有没有其他方案在底层解决。明天给你答复
0 回复 -
fry VIP0
1个月前@fate sta:目前的审计字段删除人这些去掉了,暂时不影响,你考虑一下,毕竟软删除是十分常用的底层功能
0 回复 -
fry VIP0
1个月前@fate sta:我这边定义了基类聚合根,强类型,不是动态的类型了,动态的类型是另一个问题
0 回复 -
fry VIP0
1个月前@fate sta:有没有好的解决方案?
0 回复 -
fate sta VIP0
1个月前@fry:现在处理。。
0 回复 -
fry VIP0
1个月前@fate sta:好的,改好之后告知一下
0 回复 -
fry VIP0
2周前@fate sta:这个有解决方案吗?
0 回复 -
fate sta VIP0
2周前。周未处理。有点复杂
0 回复 -
fry VIP0
2周前@fate sta:有没有好的方案?
0 回复 -
fate sta VIP0
2周前尽快处理
0 回复 -
fry VIP0
2周前@fate sta:好的
0 回复