Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Dapperを用いたマッピングとデータベースのリレーショナルについて
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30844#CommentId85661
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
SSD
 (社会人)
投稿日時
2023/2/27 18:27:36
> こういう階層イメージでしょうか?
おおよそそんな感じです。
ただIdentityの値はあらかじめインスタンスで保持しているわけではなく、
テーブルにレコードをInsertした際にテーブル内のIdentityに設定している列に自動的に入ります。
提示いただいたSelectManyを用いる場合はそれぞれのクエリの実行の間に、
Insertした後に確定した各レコードのIndentityの値を取得するクエリの実行が必要になります。
αはコレクションではない単一のインスタンスで、
Insert文の実行をした後にSelect文の実行をしてIdentityの値を取得しています。
ただβとγはコレクションのコレクションというような関係で、
αと同じようなことをするとデータベースへの接続を何度も繰り返すことになり非効率なのかなと思い、
ストアドプロシージャの中でβのレコードを1行Insertし、@@IdentityでそのβのレコードのIdentityを取得した後にγ(XMLからテーブルに変換)のレコードを複数行Insertしている感じです。
> 一括挿入なら、Dapper Plus で Bulk Insert するという手がありますね。
Executeとの処理速度の比較表を見るととてつもなく速いですね
https://dapper-plus.net/bulk-insert
ただお値段が結構しますね..
Bulk Insertの場合であっても1:nの関係で、親のIdentityの値を子のレコードに入れる場合、
・親のレコードをInsert
・確定した親レコードのIdentityを取得
・親のIdentityの値を加えて子のレコードをInsert
を繰り返すことになりInsertとIdentityの取得で接続と切断が繰り返されてしまい、パフォーマンスが悪いのかなと思ってあまり考慮していませんでした
Identityを用いてこのようにリレーショナルにすること自体がそもそもおかしいんでしょうか?