使用list参数批量插入/更新调用到Dapper中对数据库的单个操作/请求

时间:2018-04-17 05:45:19

标签: c# sql-server orm dapper

基于Dapper的github页面上的这段代码,我创建了一个批量插入语句。 enter image description here

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

是否可以指示它将多个操作更改为单个操作以减少数据库跳转次数,而无需手动创建多个插入语句,如下所示?

insert into test (a,b) values (b,c);
insert into test (a,b) values (d,e);
insert into test (a,b) values (f,g);

1 个答案:

答案 0 :(得分:1)

  

是否可以指示它将多个操作更改为单个操作

没有

通常有两个答案可以执行批量操作:

SqlBulkCopy的

@ iSR5在评论部分回答:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy

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

Dapper Plus

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

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

  • BulkInsert
  • BulkUpdate
  • BulkDelete
  • BulkMerge

(在引擎盖SqlBulkCopy下使用)

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

// 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 SQL Server一起使用。不是吗?

确切地说,SqlBulkCopy仅与SQL Server兼容。我们的图书馆支持多个提供商:

  • SQL Server
  • SQL Compact
  • 甲骨文
  • MySQL的
  • 的PostgreSQL
  • SQLite的
  • 火鸟