gpt4 book ai didi

multithreading - 使用 Entity Framework 的多线程子查询抛出错误

转载 作者:行者123 更新时间:2023-12-04 08:26:28 24 4
gpt4 key购买 nike

我一直在尝试更新我的代码在数据库查询方面的性能。我目前遇到的问题是我似乎无法找到为每个子查询获取新上下文的方法。

使用下面的简化代码将不断地生成“底层提供程序在打开时失败”。

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();
}
);

}

到目前为止,解决此问题的唯一方法似乎是使用新上下文为每个 subQuery 重建整个查询。有什么方法可以避免使用新的上下文自下而上构建每个查询?我可以将每个子查询查询附加到新的上下文吗?我正在寻找类似下面的东西。
    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();
}
);

}

最佳答案

我不确定这与您的问题究竟有什么关系,但没有一个 EF 功能是线程安全的,因此我希望在同一上下文实例上并行运行多个查询可能会因任何原因而崩溃。例如,它们在上下文中访问相同的连接属性,但线程彼此不了解,因此它们可以关闭与其他线程的连接或用其他连接实例替换该实例(您可以尝试在并行运行之前手动打开连接线程并在所有线程完成后关闭它,但这不一定是唯一的问题)。

关于multithreading - 使用 Entity Framework 的多线程子查询抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6061554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com