200 万の「pb」オブジェクト インスタンスがあります。データベースに追加したい。メモリのために、オブジェクトのリストをリストのコレクションに分割し、「for」ループで、反復ごとに 10,000 個のオブジェクト インスタンスをデータベースに追加しようとしています。
これが私のコードです
for (int i = 0; i < splittedList.Count; i++)
{
using(MyEntities db = new MyEntities()) //DB context
{
List<pb> outputPBs = splittedList[i];
db.pb.AddRange(outputPBs);
db.SaveChanges();
}
}
残念ながら、最初の反復では 10'000 インスタンスが追加されますが、次の反復では 10'000 ではなく 10'370 インスタンスが追加されます。このバグは最後の反復まで伝播します。
長いデバッグを行いました: AddRange で適切なリストを追加しましたが、AddRange の実行後、db.pb.Local には 10,370 個のオブジェクトが含まれています。
この追加の 370 個のオブジェクトは、前の反復からのインスタンスです。
私たちを手伝ってくれますか?
リストを分割するために使用したコードは次のとおりです。
public static List<List<object>> Split(List<object> source)
{
return source
.Select((x, i) => new { Index = i, Value = x })
.GroupBy(x => x.Index / 3)
.Select(x => x.Select(v => v.Value).ToList())
.ToList();
}
編集:完了
問題を解決しました。問題は 1 対多の関係で接続されていました。ツリー データ構造を作成し、枝や葉とは異なるコンテキストでルートを追加しました