dotnetcore / FreeSql

🦄 .NET aot orm, C# orm, VB.NET orm, Mysql orm, Postgresql orm, SqlServer orm, Oracle orm, Sqlite orm, Firebird orm, 达梦 orm, 人大金仓 orm, 神通 orm, 翰高 orm, 南大通用 orm, 虚谷 orm, 国产 orm, Clickhouse orm, QuestDB orm, MsAccess orm.
http://freesql.net
MIT License
3.99k stars 842 forks source link

InsertOrUpdate方法唯一索引bug #1768

Open MoDao1990217 opened 1 month ago

MoDao1990217 commented 1 month ago

问题描述及重现代码:

InsertOrUpdate() .SetSource(data) .ExecuteAffrowsAsync(); 在执行时,似乎是以主键为主,主键存在时执行更新,不存在时,执行插入。当表中除了主键外,还有唯一索引时,唯一索引存在时,则不会执行更新,而是直接报错,报索引冲突。

SetSource的重载方法,指定临时主键仅对 SqlServer/PostgreSQL/Firebird/达梦/南大通用/金仓/神通 有效

而InsertOrUpdate() .SetSource(data).ExecuteMySqlBulkCopy() 则不存在此问题,唯一索引存在时,也会执行更新,不存在时,也会执行插入。

InsertOrUpdate<T>()
                        .SetSource(data)
                        .ExecuteAffrowsAsync();

数据库版本

mysql 5.7

安装的Nuget包

各版本都有此问题

.net framework/. net core? 及具体版本

net core6-net core8

2881099 commented 1 month ago

mysql原生sql指定字段插入或更新

MoDao1990217 commented 1 month ago

mysql原生sql指定字段插入或更新

嗯,目前是这样处理的。