Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
C# 如何使用实体框架调试异步/等待(多线程)问题?_C#_.net_Multithreading_Entity Framework_Asynchronous - Fatal编程技术网

C# 如何使用实体框架调试异步/等待(多线程)问题?

C# 如何使用实体框架调试异步/等待(多线程)问题?,c#,.net,multithreading,entity-framework,asynchronous,C#,.net,Multithreading,Entity Framework,Asynchronous,我“继承”了一个使用AutoMapper和EntityFramework的多层ASP.NET核心项目。 它还大量使用异步/等待 一旦同时有多个请求,我就会收到EntityFramework发出的InvalidOperationException,通知我“在前一个异步操作完成之前,在此上下文上启动了第二个操作。” 我已经使用了生命周期设置(所有设置都设置为Scoped),并认为将所有设置都设置为Transient已经解决了这个问题,作为一个临时解决方案。但是在稍微清理了我的代码,以便将其合并到主分

我“继承”了一个使用AutoMapper和EntityFramework的多层ASP.NET核心项目。 它还大量使用异步/等待

一旦同时有多个请求,我就会收到EntityFramework发出的InvalidOperationException,通知我“在前一个异步操作完成之前,在此上下文上启动了第二个操作。”

我已经使用了生命周期设置(所有设置都设置为Scoped),并认为将所有设置都设置为Transient已经解决了这个问题,作为一个临时解决方案。但是在稍微清理了我的代码,以便将其合并到主分支之后,问题又出现了

无论如何,我认为最好创建一个示例项目来复制这个问题。但这也不起作用。我试图复制准确的项目结构,使用相同的(过时的)实体框架版本等,但没有成功。无论是“作用域”还是“瞬时”生命周期,一切都可以正常工作

您将如何调试此问题? 我已经添加了代码来记录内存中的地址,如下所示:

私有静态字符串GetAddress(对象a)
{
GCHandle handle=GCHandle.Alloc(a,GCHandleType.Weak);
IntPtr指针=GCHandle.ToIntPtr(句柄);
handle.Free();
返回“0x”+指针.ToString(“X”);
}
公共异步任务GetAll()
{
Debug.WriteLine(“#;
Thread.Sleep(2000);//使问题更容易重现
var departments=wait_departmentManager.GetAllItems();
返回新的ObjectResult(GetJsonObject(departments));
}
但这并没有起到多大作用。将生存期设置为“Transient”时,所有实例在不同的线程上都有不同的地址,因此看起来线程并不是真的在访问彼此的DBContext。 我怀疑在某个地方有一个非常微妙的问题,比如缺少一个关键字,这就是在不同的线程上运行代码。 我只是想不出那是什么。。。
非常感谢您的帮助。

您能提供一些相关的代码部分吗?请共享复制错误的示例项目。您可以在上下文或SQL跟踪上打开EF日志记录,然后使用最后一个日志项和异常堆栈跟踪来跟踪同时访问DbContext的两位代码。还要查找不带等待的异步调用。在这种情况下,代码将继续,并可能在第一个查询完成之前运行另一个查询。如果在新项目中一切正常,请对项目级文件进行比较。尤其是
web.config
。我无法在示例项目中重现该问题。在文件级别进行比较并没有真正的帮助,因为原始项目相当大。在我的示例项目中,我尝试用所有相关代码复制该结构,但没有效果。我在示例项目中使用了LocalDB,但我想这不重要。。。我将尝试EF日志记录。寻找一个没有等待的异步调用是一个好主意,谢谢!几乎所有的DB调用都会受到影响,所以我想架构本身是有缺陷的,不仅仅是一种方法有这个问题。