不,没有。
实际上,批量插入是讨论最多的问题之一。我从未遇到过您正在寻找的 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", ...);
....
正如我上面所说,这就是我imagine;我没试过。即使这有效,这也不是一个好的解决方案,因为字符串构建成本会很高,并且管理太多参数会很棘手。此外,RDBMS 端可以传递的最大参数数量也有限制。所以,我不推荐这个。
如果记录数量不是太多或者性能不是那么重要(仍然很重要;我同意),则传入List
to INSERT
查询(如您提及 http://dapper-tutorial.net/execute#example---execute-insert有问题)效果很好。包装Execute
打电话进来交易 https://stackoverflow.com/q/10689779/5779732可能有帮助。
否则,通常建议采用以下解决方案:
- 绕过Dapper;使用 ADO.NET。
- 使用带有用户定义表参数的存储过程。
- 使用 Dapper 传递表值参数 https://www.codeproject.com/Articles/835519/Passing-Table-Valued-Parameters-with-Dapper
- 使用其他一些工具,例如SQL批量复制 https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx, 精致加 http://dapper-tutorial.net/bulk-insert#example---insert-many, MicroOrm.Dapper.Repositories https://github.com/phnx47/MicroOrm.Dapper.Repositories/blob/master/src/MicroOrm.Dapper.Repositories/DapperRepository.BulkInsert.cs etc.
我从来没有使用过这些工具;所以我不知道他们的性能或其他缺点。