我一直在尝试更新我的代码在数据库查询方面的性能。我目前遇到的问题是我似乎无法找到为每个子查询获取新上下文的方法。
使用下面的简化代码将不一致地生成“底层提供程序在打开时失败”。
using (var context = getNewContextObject())
{
var result = new SomeResultObject();
var parentQuery = context.SomeTable.Where(x => x.Name = "asdf");
Parallel.Invoke(() =>
{
result.count1 = parentQuery.Where(x => x.Amount >= 100 & x.Amount < 2000).Count();
}, () =>
{
result.count2 = parentQuery.Where(x => x.Amount < 100).Count();
}
, () =>
{
result.count3 = parentQuery.Where(x => x.Amount >= 2000).Count();
}
);
}
到目前为止,解决此问题的唯一方法似乎是使用新上下文为每个子查询重建整个查询。有什么方法可以避免使用新的上下文从下到上构建每个查询?我可以改为将每个子查询查询附加到新的上下文吗?我正在寻找类似下面的东西。
Parallel.Invoke(() =>
{
var subQuery = parentQuery.Where(x => x.Amount >= 100 & x.Amount < 2000).Count();
subQuery.Context = getNewContextObject();
result.count1 = subQuery.Count();
}, () =>
{
var subQuery = parentQuery.Where(x => x.Amount < 100).Count();
subQuery.Context = getNewContextObject();
result.count2 = subQuery.Count();
}
, () =>
{
var subQuery = parentQuery.Where(x => x.Amount >= 2000).Count();
subQuery.Context = getNewContextObject();
result.count3 = subQuery.Count();
}
);
}