Dapper - 批量插入新项目并获取新ID

bulkinsert c#-4.0 dapper dapper-extensions sql

我正在使用dapper使用此方法在一个db命中添加多个新学生:

db.ExecuteAsync(@"INSERT Student(Name,Age) values (@Name,@Age)", 
  students.Select(s => new { Name = s.Name, Age = s.Age })
);

但问题是我没有新的ID。

我可以制作一个db命中,还有一些如何获得新的ID?
如果没有,执行此类批量插入的最有效方法是什么?

专家解答

不是批量插入;它基本上只是展开循环的简写;但有趣的是(也许)这可能的,如果 “火星”是你连接上启用它来问流水线序列。没有管道,它基本上是简写:

foreach(var obj in students.Select(s => new { Name = s.Name, Age = s.Age }))
{
    await db.ExecuteAsync(@"INSERT Student(Name,Age) values (@Name,@Age)", obj);
}

在这种情况下,您也可以使用QueryExecuteScalar来获取SCOPE_IDENTITY()

随着管道,它更加微妙;它做了同样的事情,但是一次有多个未完成的命令(它只await积压已满或者所有命令都被发出时)。

批量插入不返回ID。您可以考虑使用表值参数并使用INSERTOUTPUT子句一次插入整个DataTable数据(获取进程中的身份),但是在消极方面: 它确实涉及使用DataTable ; p



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因