使用列表参数批量插入/更新调用到 Dapper 中对数据库的单个操作/请求
Posted
技术标签:
【中文标题】使用列表参数批量插入/更新调用到 Dapper 中对数据库的单个操作/请求【英文标题】:Batch insert/update calls with a list parameter into a single operation/request to database in Dapper 【发布时间】:2018-04-17 05:45:19 【问题描述】:根据 Dapper 的 github 页面上的这段代码,我创建了一个批量插入语句。
Dapper 将查询拆分为多个单独的 SQL 插入语句(如 SQL 分析器中所示)。
是否可以指示它将多个操作更改为单个操作以减少 DB 行程的次数,而无需手动创建多个插入语句,如下所示?
insert into test (a,b) values (b,c);
insert into test (a,b) values (d,e);
insert into test (a,b) values (f,g);
【问题讨论】:
是的,在 C# 中使用 SqlBulkCopy。 msdn.microsoft.com/en-us/library/… 【参考方案1】:是否可以指示它把多个操作变成一个操作
没有
允许执行批量操作通常有两个答案:
SqlBulkCopy
>正如@iSR5 在评论区的回答:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy
你找不到比这更快的东西了。
小巧玲珑
免责声明:我是项目的所有者Dapper Plus
此项目不是免费的,但提供所有批量操作:
批量插入 批量更新 批量删除 批量合并(在后台使用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 服务器 SQL 精简版 甲骨文 mysql PostgreSQL SQLite 火鸟【讨论】:
SqlBulkCopy 只能用于 MS SQL Server。不是吗?以上是关于使用列表参数批量插入/更新调用到 Dapper 中对数据库的单个操作/请求的主要内容,如果未能解决你的问题,请参考以下文章
使用没有字母参数的 Postgresql 的 Dapper 存储过程