私は現在ここで闘争中です。
環境: MSSQL Server 2008 R2 を使用して C# 4.0 でアプリケーションを改善してい ます。どのタイプの ORM も使用していません。
デザイン/モデル: (架空) 会話、メッセージ、添付ファイルがあります。会話には複数のメッセージがあり、各メッセージには複数の添付ファイルを含めることができます。とても簡単な 1 .. N 接続があります。
問題:新しい会話メッセージと新しい添付ファイルを含む新しい会話を DB に保存したいと考えています。今の私の状況は、会話を保存してトップダウンに行くというものです。その ID を取得し、その ID をメッセージ オブジェクトに設定してメッセージを保存します (個別の db 呼び出しを行うたびに)。すべての添付ファイルについても同じ話ですが、これらの添付ファイルを保存する前に、まずメッセージを保存する必要があります。
私が調べた、または考えていた私の解決策
現在、ストアド プロシージャを使用して、これらの手順を個別に、トップダウンの保存メカニズムで行っています。
SqlBulkCopy : 本当に高速です。すべての会話を保存し、ID を取得し、すべてのメッセージを保存し、ID を取得するなどを念頭に置いていましたが、問題はここにあります。実行可能ですが、このアプリケーションがマルチスレッド化されているという事実により、その瞬間に他のスレッドが新しい行を挿入したり、さらに悪いことに削除したりする可能性があります。
ストアド プロシージャを作成して、データセット オブジェクトを送信するクレイジーなストアド プロシージャを作成します (これは、より自由なブレインストーミングです)。
会話を保存し、生成された ID を取得し、それを子オブジェクトに使用する巨大な SQL コマンドを手動で生成します。同様に (疑似 SQL):
会話を挿入
currentConversationId = @Identity
conversationId = currentConversationId の INSERT メッセージ
目標 誰かがより良い提案や代替案を持っていますか。私はレガシー プロジェクトで作業しているので、ORM に行くようにアドバイスしないでください。DB 呼び出しをできるだけ節約したいと考えています。