1

以下のように新しいエンティティを db に追加しようとすると、Datacontext は「現在の datacontext インスタンスに対してオブジェクト トラッキングが有効になっていません」という例外をスローします。

db.Posts.InsertOnSubmit(new entity);

変更の追跡を有効にすることは、挿入操作が多いと遅すぎるため、私にとっては解決策ではありません。

この場合の解決策は何ですか?

4

2 に答える 2

1

ケーキを持って食べることもできません。

データベース構造によっては、2 つのデータ コンテキストの使用を検討できます。1 つは changetracking を有効にし、もう 1 つは無効にします。

ただし、レコードごとに 1 つの挿入ステートメントがあります。これが linq-2-sql の動作方法であり、l-2-s 内にその解決策はありません。一括挿入のSqlBulkCopyクラスを調べる必要があります。

于 2012-10-07T11:13:37.073 に答える
0

通常、オブジェクトトラッキングを有効または無効にすると、変更トラッキングイベントハンドラーが接続または無視されます。非常に多くのアイテムを挿入しようとして、これらのイベントを接続しようとすると遅くなりすぎる場合は、はるかに大きな問題が発生します。

LINQ to SQLは、追加するレコードごとに個別のデータベース要求を発行することを忘れないでください。ここでのネットワークのボトルネックは、変更追跡イベントを接続するだけではなく、確かに大きな問題になります。LINQ to SQlは、バルクインサートに最適な選択肢ではありません。そのような操作にはSSIS/バルクコピーの使用を検討してください。

于 2012-10-05T13:21:44.943 に答える