c# - 如何在不同的线程中使用实体框架?
问题描述
我有一个实体框架dbContext
和方法,可以对数据库进行一些操作。如何正确地从多个线程调用它以避免死锁、连接错误等?我尝试了不同的方法,但我有很多例外。
public void Foo(Bar bar)
{
using (var db = new ApplicationDbContext())
{
db.Documents.Add(bar);
...
db.SaveChanges();
}
}
static void Main(string[] args)
{
...
var t1 = new Thread(()=>Foo(bar1));
thread.Start();
var t2 = new Thread(()=>Foo(bar2));
thread.Start();
...
}
我以前从未使用过线程。谢谢你的帮助。
解决方案
DbContext 不是线程安全的,最好的方法是为每个工作单元(在您的情况下为每个线程)创建单独的 DbContext 实例。请参阅建议。
推荐阅读
- javascript - javascript,reduce 函数中的 if/else 未正确满足
- node.js - 与 @babel/register 模块相关的 Node Bable 错误“ReferenceError: Unknown option: .caller。检查 .../options/ 以获取有关选项的更多信息”
- node.js - Nodejs客户端不连接测试数据库
- flutter - 在哪里/何时使用 StateNotifier 控制器执行排序、分组等操作?
- go - gopter 属性测试是否可安全用于并行使用?
- php - 找不到类“SoapClient”(laravel)
- javascript - Google Workspace 插件错误:TypeError:无法读取未定义的属性“stringInputs”
- .net - 需要更改 IE 中的设置以查看在 .net 中开发的 Web 应用程序的下拉列表
- flutter - Flutter 通过 API 上传数据
- laravel - 将请求重定向到 http 和 https