我有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();
}
编辑:完成
我解决了一个问题。问题与一对多的关系有关。我创建了树数据结构,并在不同于树枝和树叶的上下文中添加了根
当你在每次迭代中都创建一个新的时,就上下文而言,如何从上一次迭代中"遗留"370个对象是没有意义的。
你完全确定你的分割是正确的吗?
带
List<pb> outputPBs = splittedList[i];
你是说输出PB吗。计数=10000?
额外的370个对象实际上是PB吗?或者这些PB中的任何一个是否包含与可能添加到对象计数中的其他对象的关系?