Dapper - 新しいアイテムの一括挿入と新しいIDの取得

bulkinsert c#-4.0 dapper dapper-extensions sql

質問

私はdapperを使って、このメソッドを使って1回のdbヒットで複数の新しい学生を追加しています:

db.ExecuteAsync(@"INSERT Student(Name,Age) values (@Name,@Age)", 
  students.Select(s => new { Name = s.Name, Age = 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



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ