我们第一次看到这个错误:
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 语句,或者是否有更简单的方法来解决这个问题(不那么混乱的代码)?
谢谢!
我认为这可能是因为我在其中使用一个 DbContext 和多个线程。
不支持。
“DbContext 不是线程安全的。不要在线程之间共享上下文。确保在继续使用上下文实例之前等待所有异步调用。”
https://learn.microsoft.com/en-us/ef/core/dbcontext-configuration/