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] 举报,一经查实,本站将立刻删除。