无标识列的SQL Server表能否使用Dapper Plus的BulkMerge?
无标识列时使用Dapper Plus的BulkMerge方案
当然可以在无标识列的主键场景下使用Dapper Plus的BulkMerge,不需要额外用BulkInsert+BulkUpdate组合,只需正确配置主键映射即可,这也是更高效的方案。
核心实现步骤
- 配置实体与表的主键映射:通过
Identity方法指定你的主键字段(即使它不是数据库标识列),Dapper Plus会以此作为判断记录存在性的依据,执行合并逻辑。 - 直接调用BulkMerge:配置完成后即可正常调用方法,内部会自动处理新增和更新逻辑。
示例代码:
using (var connection = new SqlConnection("YourConnectionString")) { // 配置实体映射:指定表名和主键字段(非标识列) DapperPlusManager.Entity<YourEntity>() .Table("YourDatabaseTable") .Identity(x => x.YourPrimaryKeyField); // 执行批量合并 connection.BulkMerge(yourEntityList); }
关于BulkInsert+BulkUpdate组合的补充
如果坚持用这种方式实现,逻辑上是可行的,但效率低于原生BulkMerge(因为会发起两次数据库请求),大致步骤为:
- 先查询数据库中已存在的主键集合,从待处理列表中拆分出「新增记录」和「更新记录」
- 对新增记录调用
BulkInsert - 对更新记录调用
BulkUpdate
但还是优先推荐直接配置主键后的BulkMerge,代码更简洁,性能更优。
内容的提问来源于stack exchange,提问作者borgy
相关产品推荐
相关产品推荐

