使用 Dapper 在 mysql 数据库上批量插入存储过程

问题描述 投票:0回答:1

我正在尝试使用存储过程一次插入多行。在 MSSQL 上,我可以使用 UDT 的/表参数进行批量插入,但在 mysql 上,这是不支持的。 除了通过代码和 LOAD DATA INFILE 一次插入一行的迭代。有解决办法吗?

对于具有两个字段 Id 和 Name 的表 Foo,我的存储过程看起来像这样。

create procedure InsertMultiple(
    in id int,
    in name varchar(50)
)
BEGIN
    insert into Foo (Id, Name) values (id, name);
END$$

我要传入的是id,name的多条记录,这样就可以一次性创建多行

如果我遗漏了描述中的任何信息,请告诉我。感谢您的宝贵时间!

还试图在 Dapper 文档中找到一些东西,但到目前为止没有运气。

https://github.com/DapperLib/Dapper#execute-a-command-multiple-times 这在代码查询中对其进行了重新排序,在我的测试中切换到 sp 我得到了 Exception Enumerable types are not supported in this context.

也尝试在动态参数中传递所有这些,但同样的例外。

            DynamicParameters par = new();
            foreach (var r in items)
            {
               parameters.Add(new
                {
                    id = r.Id,
                    name = r.Name
                });
            }
c# mysql stored-procedures dapper bulkinsert
1个回答
0
投票

您可以尝试在 MySQL 中发送 JSON 类型。

create procedure InsertMultiple(
    in items JSON
)
BEGIN
    insert into Foo (Id, Name) values (JSON_EXTRACT(items, '$[0].id', '$[1].name');
END$$

从托管代码,简单地序列化参数。

DynamicParameters par = new();
par.Add(new {items = JsonSerializer.Serialize(items)});

https://dev.mysql.com/doc/refman/8.0/en/json.html

© www.soinside.com 2019 - 2024. All rights reserved.