【发布时间】:2018-04-04 04:02:11
【问题描述】:
有没有办法在不同的线程中异步使用一个 dbContext?
var context = new Entities();
Task.Factory.StartNew(() => context.Companies.Include(x => x.Address).First());
Task.Factory.StartNew(() => context.Companies.Include(x => x.Owner).First());
//after some changes...
context.SaveChanges();
context.Dispose();
主要思想是立即保存所有内容,如果某些内容无法返回所有更改。 实际上,我使用的是传递给 viewmodel 及其子视图模型的工作单元对象,因此它们尝试异步获取信息......上面的代码说明了这个问题。 上面的代码会抛出异常:
EntityFramework.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理 创建模型时不能使用上下文。如果在 OnModelCreating 方法中使用上下文,或者多个线程同时访问同一个上下文实例,则可能会引发此异常。请注意,不保证 DbContext 和相关类的实例成员是线程安全的。
主要问题是如果我想使用多个 DbContext 实例,每个数据传输对象都将包含不同的字段信息。 有什么建议么? 谢谢!
【问题讨论】:
标签: c# multithreading entity-framework thread-safety