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'370 个实例而不是 10'000 个。此错误会传播到最后一次迭代。

我进行了长时间的调试:我使用 AddRange 添加了正确的列表,但是 db.pb.Local 在 AddRange 执行后包含 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();
}

编辑:完成

我解决了一个问题。问题与一对多关系有关。我创建了树数据结构,并在与分支和叶子不同的上下文中添加了根

4

1 回答 1

0

当您在每次迭代中创建一个新对象时,就上下文而言,如何从上一次迭代中“剩余”370 个对象是没有意义的。

您完全确定您的拆分工作正常吗?

List<pb> outputPBs = splittedList[i];

你是说 outputPBs.Count = 10,000 吗?

额外的 370 个对象是否实际上是 PB,或者任何 PB 是否包含与可能添加到对象计数中的其他对象的关系?

于 2014-04-25T14:56:24.340 回答