gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:02:07 25 4
gpt4 key购买 nike

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

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

我看过一些示例,您可以在其中传递要插入的列表,但我看到的描述表明它只是循环并进行多次插入。

我的研究表明,执行包含多行的单个查询速度更快,所以我很想知道 Dapper 是否支持列表。

最佳答案

不,它没有。

实际上,批量插入是讨论最多的问题之一。我从未遇到过您正在使用 Dapper 寻找的解决方案。

我可以想象(不确定;从未尝试过)的一个 hack 是通过 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. 绕过 Dapper;使用 ADO.NET。
  2. 使用带有用户定义表参数的存储过程。
  3. Passing Table Valued Parameters with Dapper
  4. 使用其他工具,例如 SqlBulkCopy , Dapper Plus , MicroOrm.Dapper.Repositories等等
    我从未使用过这些工具;所以我不知道它们的性能或其他缺点。

关于mysql - Dapper 是否支持在单个查询中插入多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49864946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com