有时候,但不总是,我会遇到以下错误:"The underlying provider failed on open."
这是我的情况:
我有一个整数键的列表,并行处理它们以用作编译选择查询的参数。 我在 RIA domainservice 中使用它。
这是我的情况:
我有一个整数键的列表,并行处理它们以用作编译选择查询的参数。 我在 RIA domainservice 中使用它。
var queryResult = new List<int> {1, 2, 3}.AsParallel().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);
}
我正在使用EF4和RIA(实际上将domainservice的ObjectContext传递给已编译查询方法),连接字符串包含了著名的MultipleActiveResultSets=True... 当MultipleActiveResultSets设置为false时,我立即收到错误。
此处使用的代码是真实代码的简化版本。我还传递了更多的键,因此有更多的并行查询。
有时我在内部异常中看到数据读取器被关闭,但状态仍为连接中..
我尝试扩大连接池大小,但没有成功。
有人有好的建议来解决这个问题吗?提前感谢。