微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql – Dapper是否支持在单个查询中插入多行?

StackExchange.Dapper是否支持以下SQL语法?

INSERT INTO MyTable (a, b, c)
VALUES
  (1, 2, 3),
  (4, 5, 6),
  (7, 8, 9);

我已经看到了一些例子,你可以传入一个List来插入,但我见过的描述表明它只是循环并进行多次插入.

我的研究表明,在其中使用多行进行单个查询的速度更快,因此我很想知道Dapper是否支持使用列表.

解决方法:

不,不.

实际上,批量插入是讨论最多的问题之一.我从来没有遇到过你正在寻找的Dapper解决方案.

我能想象的一个黑客(不确定;从未尝试过)是传递DynamicParameters替换你的实际值(1,2,3 ……).所以你的查询变成如下所示:

INSERT INTO MyTable (a, b, c)
VALUES
  (@1, @2, @3),
  (@4, @5, @6),
  (@7, @8, @9);

并且,您传递DynamicParameters,如下所示:

var param = new DynamicParameters();
param.Add("@1", ...);
param.Add("@2", ...);
param.Add("@3", ...);
param.Add("@4", ...);
....

正如我上面所说,这就是我的想象;我没试过.即使这样可行,这也不是一个好的解决方案,因为字符串构建成本会很高,管理太多参数会很棘手.此外,RDBMS方面有限制您可以传递多少个最大参数.所以,我不推荐这个.

如果记录数量不是太多,或者如果性能不是那么重要(仍然很重要;我同意),将List传递给INSERT查询(因为你有问题的mentioned)效果很好.在Transaction中包装执行调用可能有所帮助.

否则,通常建议采用以下解决方案:

>绕过小巧玲珑;使用ADO.NET.
>将存储过程与“用户定义表”参数一起使用.
> Passing Table Valued Parameters with Dapper
>使用其他工具,如SqlBulkCopy,Dapper Plus,MicroOrm.Dapper.Repositories等.
我从未使用过这些工具;所以我不知道他们的表现或其他缺点.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐