Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 并行执行查询抛出;基础提供程序在打开时失败。”;错误_.net_Ria_Parallel Processing_Linq.compiledquery - Fatal编程技术网

.net 并行执行查询抛出;基础提供程序在打开时失败。”;错误

.net 并行执行查询抛出;基础提供程序在打开时失败。”;错误,.net,ria,parallel-processing,linq.compiledquery,.net,Ria,Parallel Processing,Linq.compiledquery,有时,并非总是,我会遇到以下错误:“基础提供程序在打开时失败。” 这就是我的情况: 我有一个我并行处理的整数键列表,用作编译的select查询中的参数。我在RIA域服务中使用它 var queryResult = new List<int> {1, 2, 3}.AsParallel().Select(i => CompiledQueries.GetRecordByKey(this.ObjectContext, i)).ToList(); var queryResult=new

有时,并非总是,我会遇到以下错误:“基础提供程序在打开时失败。”

这就是我的情况:

我有一个我并行处理的整数键列表,用作编译的select查询中的参数。我在RIA域服务中使用它

var queryResult = new List<int> {1, 2, 3}.AsParallel().Select(i => CompiledQueries.GetRecordByKey(this.ObjectContext, i)).ToList();
var queryResult=new List{1,2,3}.aspallel().Select(i=>CompiledQueries.GetRecordByKey(this.ObjectContext,i)).ToList();
编译后的查询是这样的:

public static IEnumerable<CompiledQueryResult> GetRecordByKey(MyEntities _context, int _key)
    {
        if (_getRecordByKey == null)
        {
            _getRecordByKey = CompiledQuery.Compile<MyEntities, int, IEnumerable<CompiledQueryResult>>
                ((ctx, key) =>
                    ctx.Records
                    .Where(r => r.Id == key)
                    .Select(r => new CompiledQueryResult
                    {
                        Id = r.ID,
                        Name = r.Name,
                        ...
                    })
                );
        }
        return _getRecordByKey.Invoke(_context, _key);
    }
public static IEnumerable GetRecordByKey(MyEntities\u context,int\u key)
{
if(_getRecordByKey==null)
{
_getRecordByKey=CompiledQuery.Compile
((ctx,键)=>
ctx.记录
.Where(r=>r.Id==key)
.Select(r=>newcompiledQueryResult
{
Id=r.Id,
Name=r.Name,
...
})
);
}
返回_getRecordByKey.Invoke(_上下文,_键);
}
我使用的是EF4,RIA(实际上domainservice的ObjectContext被传递给编译后的查询方法),连接字符串包含著名的MultipleActiveResultSets=True。。。 当MultipleActiveResultSets设置为false时,我立即得到错误

这里使用的代码是真实代码的简化版本。我还传递了更多的键,因此有更多的并行查询。。 有时我在内部异常中看到数据读取器正在关闭,但状态为“正在连接”。
我试图扩大连接池的大小,但没有成功


有没有解决这个问题的好建议?Thx提前。

您是否尝试将connectionstring中的最小池大小选项设置为更高的值


尝试以下链接:

同样的问题也发生在我的应用程序中,结果是跨线程使用ObjectContext。如果在混合中有一个static,并且最终同时执行来自两个不同线程的查询(在同一ObjectContext上),那么当第一个完成的线程关闭连接,另一个尝试打开连接时,您将得到一个异常


愚蠢的我没有从以前的项目中学到什么,在这个项目中,我们使用了LinqToSQL,它实际上在读卡器上为连接抛出了一个跨线程操作异常。不幸的是,ObjectContext没有以相同的方式阻止此操作。

您好,Stephane,thx对于您的解决方案,我将最小池大小从0更改为1000,错误不再发生。我已经将最大池大小指定为1000,但我从未想过此设置会解决此问题。一百万泰铢。。这也是我的问题。我解决了这个问题,在执行一系列并行任务之前手动打开连接,然后在所有任务完成后关闭连接。