首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将带有list参数的批处理插入/更新调用到Dapper中的单个操作/数据库请求中

将带有list参数的批处理插入/更新调用到Dapper中的单个操作/数据库请求中
EN

Stack Overflow用户
提问于 2018-04-17 05:45:19
回答 1查看 879关注 0票数 0

基于Dapper的github页面上的代码,我创建了一个bulk insert语句。

Dapper将查询拆分为多个单独的split语句(如SQL分析器中所示)。

是否可以指示它将多个操作转换为单个操作,以减少DB trips的数量,而不必手动创建以下多个insert语句?

代码语言:javascript
运行
复制
insert into test (a,b) values (b,c);
insert into test (a,b) values (d,e);
insert into test (a,b) values (f,g);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-17 13:24:47

是否可以指示它将多个操作转换为单个操作?

不是

通常有两种方法可以执行大容量操作:

SqlBulkCopy

如@iSR5 5在注释部分中回答:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy

你找不到比这更快的东西了。

Dapper Plus

免责声明:我是项目Dapper Plus的所有者

此项目不是免费的,但提供所有批量操作:

  • BulkInsert
  • BulkUpdate
  • BulkDelete
  • BulkMerge

(在引擎盖SqlBulkCopy下使用)

还有一些更多的选项,比如输出身份值:

代码语言:javascript
运行
复制
// CONFIGURE & MAP entity
DapperPlusManager.Entity<Order>()
                 .Table("Orders")
                 .Identity(x => x.ID);

// CHAIN & SAVE entity
connection.BulkInsert(orders)
          .AlsoInsert(order => order.Items);
          .Include(x => x.ThenMerge(order => order.Invoice)
                         .AlsoMerge(invoice => invoice.Items))
          .AlsoMerge(x => x.ShippingAddress);   

编辑:答案评论

不过,SqlBulkCopy只能与MS一起使用。难到不是么?

确切地说,SqlBulkCopy只与Server兼容。我们的库支持多个提供者:

  • SQL Server
  • SQL紧凑型
  • 甲骨文
  • MySql
  • PostgreSQL
  • SQLite
  • 火鸟
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49870698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档