C# 实体框架c:在循环中添加范围时出现错误

C# 实体框架c:在循环中添加范围时出现错误,c#,database,frameworks,entity,addrange,C#,Database,Frameworks,Entity,Addrange,我有200万pb对象实例。我想把它添加到我的数据库中。由于内存的原因,我将对象列表拆分为列表集合,在for循环中,我试图在每次迭代中将10000个对象实例添加到数据库中 这是我的密码 for (int i = 0; i < splittedList.Count; i++) { using(MyEntities db = new MyEntities()) //DB context

我有200万pb对象实例。我想把它添加到我的数据库中。由于内存的原因,我将对象列表拆分为列表集合,在for循环中,我试图在每次迭代中将10000个对象实例添加到数据库中

这是我的密码

 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();
    }
}
不幸的是,第一次迭代会添加10000个实例,但下一次迭代会添加10'370个实例,而不是10000个。这个bug一直传播到最后一次迭代

我做了一个长时间的调试:我用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();
}
编辑:已完成


我解决了一个问题。这个问题与一对多的关系有关。我创建了树数据结构,并在不同于分支和叶的上下文中添加了根,因为您在每次迭代中都要创建一个新的对象,所以就上下文而言,上一次迭代中的“剩余”370个对象是没有意义的

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

你是说outputPBs.Count=10000


附加的370个对象是否实际为PBs,或者是否有任何PBs包含与可能添加到对象计数中的其他对象的关系?

这是否超出了某个阈值?在较少的情况下,它不会这样做吗?您的拆分列表每个包含10.000个对象,对吗?我尝试将列表拆分为包含100个实例的包,其工作方式如下:第一次迭代:添加100个元素,表包含100个元素第二次迭代:添加200个元素100个适当元素和100个额外元素,表包含300个元素第三次迭代:添加300个元素100个适当元素和200个额外元素,表包含600个元素。在本例中,这些额外的元素是以前插入的元素的副本。我已附加到用于拆分列表的主点拆分函数。是-outputPBs.Count=10000;另外370个对象是PBs,我认为有一个以前添加的PBs的副本。PBs与FN有一定的关系,多个PBs对应一个FN。它可能是根本原因?在db.pb.AddRangeoutputPBs之前;在上下文中检查PBs的数量,如果是370,那么你是对的,它们是PBs。。。检查10000个转变为10370个的PBs中有关系的PBs的数量。。。尝试使用pb.Connection.Open和pb.Connection.Close更好地管理上下文的连接,并防止任何池。这应该是db.Connection.Open和db.Connection.Close
List<pb> outputPBs = splittedList[i];