【问题标题】:Why is this AsParallel operation throwing a data provider error?为什么这个 AsParallel 操作会引发数据提供程序错误?
【发布时间】:2016-02-16 09:48:50
【问题描述】:

感谢收看。我有以下返回语句:

            //Return the result set
            return new FilterDto.FilterResult<Application>
            {
                Count = count,
                Results = _results.ToList().AsParallel().Select(s => ConstructApplication(s))
            };

调用如下方法:

public Application ConstructApplication(Application application)
        {
            var result = new Application
            {
                Id = application.Id,
                Title = application.Title,
                Icon = application.Icon   
              
                   . . .
             
            };
            
            return result;
        }

AsParallel() 调用抛出“底层提供程序未能打开”错误;当AsParallel() 与实体框架一起使用时,这个问题已经得到了很好的记录。

问题

由于我在AsEnumerable() 之前调用ToList(),我的集合不应该是线程安全的,因为它现在是内存中的集合吗?

【问题讨论】:

  • 你能检查内部异常吗?因为代码似乎很好。从错误我认为连接字符串有问题。还可以尝试删除 AsParallel 并检查它是否正常工作。
  • @RohitHarkhani 谢谢,没有AsParallel() 位,代码运行良好。这是内部异常:“连接未关闭。连接的当前状态为正在连接。”

标签: c# entity-framework task-parallel-library plinq


【解决方案1】:

问题是我调用的构造函数中的某些属性是延迟加载的,因此我需要在调用 AsParallel() 和使用例如 .Include(i =&gt; i.Image) 的构造函数之前预先加载它们。

有趣的是,即使不使用 AsParallel(),我的查询速度也更快,因为预先加载了相关实体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2013-10-25
    相关资源
    最近更新 更多