DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.27k stars 1.33k forks source link

更新操作无法更新主键字段 #1115

Closed TTnTTT closed 1 year ago

TTnTTT commented 1 year ago

我使用了SqlSugarConfig.client.Updateable<>(entity).IgnoreColumns(ignoreAllNullColumns:true)进行更新操作(不想把不需要更新的内容变成null), 因为实体没有任何需要更新的内容所以执行的sql是这样的update set where TemplateId=@TemplateId,这样的SQL是有问题的,所以我只有把主键的原始值设置给主键, 预期的SQL是这样的:update set TemplateId=@TemplateId where TemplateId=@TemplateId 这样就不会报错了,但是我用了下面图片2的方式后最终SQL并没有对主键进行更新。 请问这个问题还有其他解决方式吗? 实体类定义: image 问题截图: `XL@EHRN@UFOZCP5@LZQ5SK

DotNetNext commented 1 year ago

2个方法 1 新建一个类 没主键 2 删掉在插入 因为主键改了 更新意义就不存在了

DotNetNext commented 1 year ago

主键在sqlsugar是禁止更新操作的也是为了数据安全

TTnTTT commented 1 year ago

2个方法 1 新建一个类 没主键 2 删掉在插入 因为主键改了 更新意义就不存在了

主键并不会被改,如果where能找到数据修改的主键也会是跟之前一样的主键,我用过的其他ORM框架当没有字段要修改时并不

TTnTTT commented 1 year ago

主键在sqlsugar是禁止更新操作的也是为了数据安全

我建议这个应该让用户自己决定,默认可以是不能修改主键,有时候使用方便比数据安全更重要。而且一个主键的修改并不会有什么安全隐患。

DotNetNext commented 1 year ago

直接删除在加就行了 ,没人修改主键的

DotNetNext commented 1 year ago

主键都要修改你定义主键意义何在

TTnTTT commented 1 year ago

主键都要修改你定义主键意义何在

不是,问题是现在这种基础的修改都会报错,问题关键不在修改主键,可以不修改主键,但至少保证我调用的时候不会报错吧。总不能每一个修改我都加个try-catch吧。

DotNetNext commented 1 year ago

update set where TemplateId=@TemplateId 你这个错是没有一列可以更新的

DotNetNext commented 1 year ago

错误我认为还是要提示出来的,这样用户知道是怎么回事

DotNetNext commented 1 year ago

你这个也好处理如果一列没有就不更新

DotNetNext commented 1 year ago

或者强制给一个更新时间这样就不会出现这种问题了