質問

多くのデータが一度にSQLデータベースに挿入されるアプリケーションに取り組んでいます。私はlinqをSQLに使用し、挿入操作としてこのようなものを持っています。

foreach(オブジェクトのvar obj){context.insertonsubmit(obj); } context.submitchanges();

問題は次のとおりです。例外を取得した場合(たとえば、DuplicateKeyException)、どのオブジェクトが問題を引き起こしたかはわかりません。私が取得している唯一の情報は、少なくとも1つのオブジェクトに、データベースの他のキーと同一のキー値が含まれていることです。

どのオブジェクトが競合を引き起こしたかについて、より多くの情報を抽出することは可能ですか?

もちろん、すべてのIntersonSubmitの後にSubmitchangesを呼び出すこともできますが、挿入しているデータの量が非常に遅いです。

誰かが私のために何かヒントがありますか?ありがとう!

役に立ちましたか?

解決

友人、私は賢いアレックになろうとはしていません。おそらくとにかく成功していますが、私の主な提案は、あなたがデータ負荷で使用するためにLINQを放棄することです。 SSISは、ETL作業用のシンプルで効率的で保守コードを生成します。理由は、まさにそれを行うように設計されています。

第二に、どのタイプの例外がスローされているかを指定しません。また、その例外が提示されたときに非null内なる例外が含まれている場合もありません。それが私が見る最初の場所です。

幸運を。

他のヒント

バルクインサートにLinqからSQLを使用しています。それは遅いです、それはそのために設計されていませんが、それは私のシナリオにうまく適合します。

ctx.logを使用してエラーを追跡しています。良い例があります http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

また、CTX.LOGを使用して進行状況バーを取得します。その便利なことがわかります。詳細については、私のブログ投稿でご覧くださいhttp://epandzo.wordpress.com/2011/01/02/linqto-sql-ctx-submitchanges-progress/

およびStackoverflowの質問LinqからSQL Submitchangess()進行

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top