Parallel.ForEach错误

时间:2018-02-14 05:24:04

标签: c# parallel.foreach

  

类型' System.InvalidOperationException'的例外情况发生在   EntityFramework.dll但未在用户代码中处理

     

附加信息:模型时不能使用上下文   被创造。如果使用上下文,则可能抛出此异常   在OnModelCreating方法内部或者相同的上下文实例   由多个线程同时访问。请注意实例成员   DbContext和相关类不保证是线程安全的。

IQueryable<VMPARForms> TempfilteredMember = filteredMember;                      

IQueryable<clsPARForms> parformslist = dbcontext.PARForms;

Parallel.ForEach(TempfilteredMember.Where(c => c.PARStatus == 21), item =>
{
    var list = parformslist.Where(x => x.CaseNumber == item.CaseNumber && x.PARID != item.PARID).FirstOrDefault();

    if (list != null)
    {
        item.PARStatus = list.PARStatus;
    }

});

1 个答案:

答案 0 :(得分:0)

我认为问题在于您正在尝试创建EF Context的多个对象。文件说

  

ObjectContext类不是线程安全的。在多线程方案中无法确保ObjectContext中数据对象的完整性。   The ObjectContext class is not thread safe

     

上下文不是线程安全的。只要多个上下文不同时跟踪同一实体类的实例,您仍然可以创建多线程应用程序。 EF Multithreading

根据您的应用程序,您可以使用ToList()实现数据,并根据需要对其进行过滤,或尝试更改查询的逻辑。