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合法嗎? 是的,了解原因