实体框架中的多个过程调用导致错误 - 不允许新事务,因为会话中还有其他线程正在运行

问题描述 投票:0回答:1

我们第一次看到这个错误:

System.Data.SqlClient.SqlException:不允许新事务,因为会话中还有其他线程正在运行

我认为这可能是因为我在其中使用了一个

DbContext
和多个线程。试图想出一个解决方案,代码看起来像这样:

using (var db = new DbContext)
{
    db.sp_updateTable1(params);
    db.sp_updateTable2(params);
    db.sp_updateTable2(params);   
    // ...
}

每个过程调用都是实体框架中的一个函数导入,因此调用此函数:

return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_updateTable1", params);

我是否需要将每个过程调用包装在其自己的 using 语句中 - 所以我最终会得到上面的 3 个 using 语句,或者是否有更简单的方法来解决这个问题(不那么混乱的代码)?

谢谢!

c# asp.net-mvc entity-framework
1个回答
0
投票

我认为这可能是因为我在其中使用一个 DbContext 和多个线程。

不支持。

“DbContext 不是线程安全的。不要在线程之间共享上下文。确保在继续使用上下文实例之前等待所有异步调用。”

https://learn.microsoft.com/en-us/ef/core/dbcontext-configuration/

© www.soinside.com 2019 - 2024. All rights reserved.