以下のように新しいエンティティを db に追加しようとすると、Datacontext は「現在の datacontext インスタンスに対してオブジェクト トラッキングが有効になっていません」という例外をスローします。
db.Posts.InsertOnSubmit(new entity);
変更の追跡を有効にすることは、挿入操作が多いと遅すぎるため、私にとっては解決策ではありません。
この場合の解決策は何ですか?
以下のように新しいエンティティを db に追加しようとすると、Datacontext は「現在の datacontext インスタンスに対してオブジェクト トラッキングが有効になっていません」という例外をスローします。
db.Posts.InsertOnSubmit(new entity);
変更の追跡を有効にすることは、挿入操作が多いと遅すぎるため、私にとっては解決策ではありません。
この場合の解決策は何ですか?
ケーキを持って食べることもできません。
データベース構造によっては、2 つのデータ コンテキストの使用を検討できます。1 つは changetracking を有効にし、もう 1 つは無効にします。
ただし、レコードごとに 1 つの挿入ステートメントがあります。これが linq-2-sql の動作方法であり、l-2-s 内にその解決策はありません。一括挿入のSqlBulkCopy
クラスを調べる必要があります。
通常、オブジェクトトラッキングを有効または無効にすると、変更トラッキングイベントハンドラーが接続または無視されます。非常に多くのアイテムを挿入しようとして、これらのイベントを接続しようとすると遅くなりすぎる場合は、はるかに大きな問題が発生します。
LINQ to SQLは、追加するレコードごとに個別のデータベース要求を発行することを忘れないでください。ここでのネットワークのボトルネックは、変更追跡イベントを接続するだけではなく、確かに大きな問題になります。LINQ to SQlは、バルクインサートに最適な選択肢ではありません。そのような操作にはSSIS/バルクコピーの使用を検討してください。