0

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 対多の関係で接続されていました。ツリー データ構造を作成し、枝や葉とは異なるコンテキストでルートを追加しました

4

1 に答える 1