FreeSql
FreeSql copied to clipboard
BaseEntity直接更新DTO
Feature 特性
在使用BaseEntity的时候可以直接映射某个Dto进行更新。 如果能有一个参数可以配置为null则忽略就更好了。 如Update(T dto, bool isIgnoreNull = true)
简要描述原因
BaseEntity在更新的时候没法指定忽略列,如果更新的时候某个字段不想更新,则需要自己手动配置需要更新的列,直接使用Mapster之类的映射工具会导致不想更新的列也被更新。
使用场景
例如UserEntity,在修改个人信息的时候不希望修改密码,Dto中不存在密码,但是如果使用映射工具映射到UserEntity,则对应的password字段为null,此时update会将密码字段错误的映射为null。
方法1:
[Column(CanUpdate = false)]
方法2:
fsql.Update<T>().SetSource(user).IgnoreColumns(a => a.Password).ExecuteAffrows();
@2881099 感谢回答 方法1的话也有需要修改密码的时候,直接CanUpdate=false不合适吧?
方法2已经不是BaseEntity的用法了,如果这种情况推荐直接BaseEntity.Orm这样拿到fsql的实例来使用吗?
方法1,修改密码可以用 IFreeSql.IUpdate 来更新
方法2,如你所讲一样