Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Dapper支持在一个查询中插入多行吗?_Mysql_Mariadb_Dapper - Fatal编程技术网

Mysql Dapper支持在一个查询中插入多行吗?

Mysql Dapper支持在一个查询中插入多行吗?,mysql,mariadb,dapper,Mysql,Mariadb,Dapper,是否支持以下SQL语法 INSERT INTO MyTable (a, b, c) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9); 我见过一些示例,其中可以传递要插入的列表,但我看到的描述表明它只是循环和执行多个插入 我的研究表明,使用多行进行单个查询速度更快,因此我想知道Dapper是否支持使用列表进行查询。不,它不支持 实际上,批量插入是讨论最多的问题之一。我从来没有遇到过你正在寻找的解决方案 我能想象的一个黑客(不确定;从未尝试过)是传递Dyn

是否支持以下SQL语法

INSERT INTO MyTable (a, b, c)
VALUES
  (1, 2, 3),
  (4, 5, 6),
  (7, 8, 9);
我见过一些示例,其中可以传递要插入的列表,但我看到的描述表明它只是循环和执行多个插入

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

不,它不支持

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

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

INSERT INTO MyTable (a, b, c)
VALUES
  (@1, @2, @3),
  (@4, @5, @6),
  (@7, @8, @9);
var param = new DynamicParameters();
param.Add("@1", ...);
param.Add("@2", ...);
param.Add("@3", ...);
param.Add("@4", ...);
....
然后,传入
DynamicParameters
如下所示:

INSERT INTO MyTable (a, b, c)
VALUES
  (@1, @2, @3),
  (@4, @5, @6),
  (@7, @8, @9);
var param = new DynamicParameters();
param.Add("@1", ...);
param.Add("@2", ...);
param.Add("@3", ...);
param.Add("@4", ...);
....
正如我上面所说,这就是我所想象的;我没有试过。即使这样做有效,这也不是一个好的解决方案,因为字符串构建成本将很高,管理太多参数将很棘手。此外,在RDBMS方面,您可以传递的最大参数数量也有限制。所以,我不建议这样做

如果记录的数量不是太多,或者性能不是那么关键(仍然很重要;我同意),那么将
列表
传递到
插入
查询(如您所述)会非常有效。包装
Execute
callin可能会有所帮助

否则,通常推荐以下解决方案:

  • 旁路短节;使用ADO.NET
  • 将存储过程与用户定义的表参数一起使用
  • 使用其他工具,如等
    我从未使用过那些工具;所以我不知道他们的表现或其他缺点

  • 正如Amit Joshi所说,Dapper不支持这种语法

    根据我的经验,我可以向您推荐最有效的方法是使用存储过程并传递表值参数。
    如果您有一个列表,您可以使用它将列表转换为DataTable。


    坦白说,我建议的nuget是我的

    我使用的是mariadb/mysql,所以不幸的是他们没有TVP。我担心另一种选择更可怕——这种方法很有魅力。如果您在远程计算机上安装了SQL server,那么字符串构建成本对于通信开销来说可以忽略不计。如果行太多,只需按块插入即可。此项目已执行此操作: