FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

BaseEntity直接更新DTO

Open j4587698 opened this issue 4 years ago • 3 comments

Feature 特性

在使用BaseEntity的时候可以直接映射某个Dto进行更新。 如果能有一个参数可以配置为null则忽略就更好了。 如Update(T dto, bool isIgnoreNull = true)

简要描述原因

BaseEntity在更新的时候没法指定忽略列,如果更新的时候某个字段不想更新,则需要自己手动配置需要更新的列,直接使用Mapster之类的映射工具会导致不想更新的列也被更新。

使用场景

例如UserEntity,在修改个人信息的时候不希望修改密码,Dto中不存在密码,但是如果使用映射工具映射到UserEntity,则对应的password字段为null,此时update会将密码字段错误的映射为null。

j4587698 avatar Aug 19 '21 09:08 j4587698

方法1:

[Column(CanUpdate = false)]

方法2:

fsql.Update<T>().SetSource(user).IgnoreColumns(a => a.Password).ExecuteAffrows();

2881099 avatar Aug 28 '21 11:08 2881099

@2881099 感谢回答 方法1的话也有需要修改密码的时候,直接CanUpdate=false不合适吧?

方法2已经不是BaseEntity的用法了,如果这种情况推荐直接BaseEntity.Orm这样拿到fsql的实例来使用吗?

j4587698 avatar Sep 01 '21 00:09 j4587698

方法1,修改密码可以用 IFreeSql.IUpdate 来更新

方法2,如你所讲一样

2881099 avatar Sep 01 '21 02:09 2881099