StackExchange.Dapper是否支持以下SQL语法?
INSERT INTO MyTable (a, b, c)
VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9);
我已经看到了一些例子,你可以传入一个要插入的List,但我见过的描述表明它只是循环并进行多次插入。
我的研究表明,在其中执行包含多行的单个查询的速度更快,因此我很想知道Dapper是否支持使用列表。
答案 0 :(得分:2)
不,它没有。
实际上,批量插入是讨论最多的问题之一。我从来没有遇到过你在寻找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中结束Execute
来电可能有所帮助。
否则,通常建议采用以下解决方案:
答案 1 :(得分:0)
正如Amit Joshi所说,Dapper并不支持这种语法。
根据我的经验,我可以向您推荐,最有效的方法是使用存储过程并传递表值参数。
如果您有列表,则可以使用此nuget将列表转换为DataTable
披露,我建议的nuget是我的