FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

InsertOrUpdate方法唯一索引bug

Open MoDao1990217 opened this issue 10 months ago • 2 comments

问题描述及重现代码:

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

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

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

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

数据库版本

mysql 5.7

安装的Nuget包

各版本都有此问题

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

net core6-net core8

MoDao1990217 avatar Apr 01 '24 06:04 MoDao1990217

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

2881099 avatar Apr 01 '24 09:04 2881099

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

嗯,目前是这样处理的。

MoDao1990217 avatar Apr 01 '24 15:04 MoDao1990217