Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

添加 通过DTO 进行update的方法, 特点是,忽略值为null的属性. #1688

Merged
merged 1 commit into from
Dec 14, 2023

Conversation

easy999000
Copy link
Contributor

说明:在开发的时候,希望代码能实现更高的复用,那么一个编辑方法,我希望在多个不同的场景都可以使用. 但是不同场景涉及的字段有时不一样的,每次都把完整的DTO实体生成出来,既繁琐,又容易出错, 于是想升级这个方法, 不想update的字段,为null就好了,这样不会影响数据库中的原有值. 只更新有实际意义的字段.

说明:在开发的时候,希望代码能实现更高的复用,那么一个更新的方法,我希望在多个不同的场景都可以使用. 但是不同场景涉及的字段有事不一样的,每次都把完整的DTO实体生成出来,既繁琐,又容易出错, 于是想升级这个方法, 不想update的字段,为空就好了,这样不会影响数据库中的原有值.
@easy999000
Copy link
Contributor Author

尤其是像前后端分离,做接口开发的. 有的地方需要更新2个字段,有的需要更新5个字段,前端调用的地方多切不确定. 但是内部逻辑都是一样的. 如果要制作专属的DTO,给每个场景一个,可能DTO的数量要翻及倍. 这是多且无用的代码.
而让所有人使用一个全字段的公共方法, 拼凑一个大DTO是很浪费资源的.

@easy999000
Copy link
Contributor Author

就没有这种,按需更新的方法来的方便,实用.

@easy999000
Copy link
Contributor Author

我们项目一个订单的DTO有30多个字段. 一个产品信息的DTO有60个字段. 每次做一个完成的DTO想起来都可怕.

@2881099
Copy link
Collaborator

2881099 commented Dec 13, 2023

SetSource + UpdateColumns/IgnoreColumns

还有 fsql.UpdateDict(字典).ExecuteAffrows()

@easy999000
Copy link
Contributor Author

SetSource + UpdateColumns/IgnoreColumns

前提是, 我是接口开发人员,我并不确定,实际应用的人员,要修改哪些字段.
如果这个接口固定只修改某5个字段,也就不用这么麻烦了.
使用我接口的人员,可能要修改全部30个字段,也可能他只想修改其中的一两个字段,这个我在写代码的时候是不知道的.

@easy999000
Copy link
Contributor Author

SetSource + UpdateColumns/IgnoreColumns

前提是, 我是接口开发人员,我并不确定,实际应用的人员,要修改哪些字段. 如果这个接口固定只修改某5个字段,也就不用这么麻烦了. 使用我接口的人员,可能要修改全部30个字段,也可能他只想修改其中的一两个字段,这个我在写代码的时候是不知道的.

我不想去提供很多个接口, 接口一:固定修改其中的某5个字段,接口二:固定修改中间的某5个字段,接口三:用于特定修改某3个字段,这样的接口.

@easy999000
Copy link
Contributor Author

SetSource + UpdateColumns/IgnoreColumns

还有 fsql.UpdateDict(字典).ExecuteAffrows()

updateDict有一个问题,不能使用,强类型的 Where,并且还要手动设置表名,这样很不方便也容易出错. 如果能解决这2个问题,还好.

@easy999000
Copy link
Contributor Author

easy999000 commented Dec 14, 2023

有个大的DTO,有26个字段.但是在实际使用的时候,不同场景只需要修改一部分字段.
场景一需要修改 ,ABCDE字段
场景二需要修改,ABCDEFGHI字段.
场景三需要修改ABCLMNOP字段.
场景四需要修改DEFXYZ字段.
还有很多不特定的场景.
如果没有一个通用的接口,那么就需要真的每种情况,写一个接口,并建立一个对应的DTO.会导致系统中大量的代码和DTO冗余,给后期维护代理巨大的麻烦.
那么还有一种情况,开发一个全字段接口和26个属性的DTO, 但是呢,每次需要修改的时候,需要给26个属性,全都赋值,即使不需要修改的字段,也必须赋上当前值.否则数据库里面的数据会被清空. 这种情况带来的第一个问题是麻烦,而且浪费系统资源,查询拼接一个大的DTO,很麻烦的. 第二个问题,存在一个时间差的问题,如果并发,会覆盖其他操作的修改.
那么我的思路是,想提供一个全字段修改的接口,但是呢,只提交需要修改的字段.不需要变化的字段设置成NULL, 对于使用者的便利性,服务器的效率和并发问题,都有非常大的提高.

@2881099 2881099 merged commit 25e8a3e into dotnetcore:master Dec 14, 2023
1 check passed
@2881099
Copy link
Collaborator

2881099 commented Dec 14, 2023

Api 命名换成了 SetDtoIgnore,使用习惯与 SetSourceIgnore 一致

@2881099
Copy link
Collaborator

2881099 commented Dec 15, 2023

v3.2.807-preview20231215

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants