質問: s.Age }) ); ``` しかし、私は新しいIDを持っていない問題。 1つのdbヒットを作成することはできますか、新しいIDを取得する方法はいくつかありますか? そうでない場合、そのような一括挿入を実行する最も効率的な方法は何ですか?
回答: これは一括挿入ではあり*ません* 。基本的にはループを展開するだけです。興味深いことに(おそらく)、あなたの接続で「MARS」が有効になっている*場合は* 、そのシーケンスを*パイプライン*するよう要求すること*は*可能です。パイプラインがなければ、 *基本的に次のように*短縮されます。 ``` 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); } ``` その場合は、 `Query`または`ExecuteScalar`を使用して`SCOPE_IDENTITY()`を取得することもできます。 パイプライン*で* 、それはより微妙です。同じことをしますが、一度に複数の未処理のコマンドを使用します(バックログがいっぱいになったとき、またはすべてのコマンドが発行されたときだけsを`await`ています)。 一括挿入はIDを返しません。テーブル値のパラメータを使用し、 `INSERT`を使用して`OUTPUT`句を使用して、データの`DataTable`全体を一度に挿入する(プロセスのIDを取得する)こと*は*考慮*でき* `DataTable`が、負の側*では`DataTable`* ; p