我有一个 SQL Server 表,其中使用以下命令插入行:
var sql = @"
DECLARE @InsertedRows AS TABLE (Id BIGINT);
INSERT INTO Person ([Name], [Age]) OUTPUT Inserted.Id INTO @InsertedRows
VALUES (@Name, @Age);
SELECT Id FROM @InsertedRows;";
Person person = ...;
var id = connection.Query<long>(sql, person).First();
这一切都很好,但是如果我尝试插入多个项目并使用以下命令返回所有插入的 id:
IEnumerable<Person> people = ...;
var ids = connection.Query<long>(sql, people);
我收到错误:
System.InvalidOperationException :在此上下文中不允许使用可枚举的参数序列(数组、列表等)
在Dapper.SqlMapper.GetCacheInfo(身份标识,对象示例参数,布尔addToCache)
在 Dapper.SqlMapper.d__23`1.MoveNext()
--- 从先前抛出异常的位置开始的堆栈跟踪结束 ---
如何在 Dapper 中返回多个插入的 id?
某个地方的某些东西需要循环。您有一条插入一行的 sql 语句,并在列表中发送代码。由于您喜欢字符串文字中的 SQL,因此我会坚持一次插入一个人,将循环放入 C# 中,并使用以下命令恢复 C# 中的每个 idSELECT SCOPE_IDENTITY()
。您不再需要 @InsertedRows 或 OUTPUT。
如果您确实想在 SQL 中循环,我相信您需要查看表值参数来传递插入列表。 Dapper 非常乐意返回多个 Id。它抱怨多个人作为输入参数。
有一天,希望很快,我们将回顾字符串文字中的 SQL,就像我们现在看到的那样山羊祭祀.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)