【发布时间】:2018-05-29 16:11:59
【问题描述】:
在单元测试方法中,每当我调用SaveChanges 或SaveChangesAsync(在实体框架6 DbContext 实例上)在另一个异步方法调用(如SingleOrDefaultAsync 或@)之后,我都会系统地获得ThreadAbortException 987654327@.
看起来在与创建DbContext 实例的线程不同的线程上调用SaveChanges/SaveChangesAsync 是导致问题的原因,这很奇怪。据我所知,在 await 关键字之后执行代码由不同的工作线程继续执行这一事实并不罕见。
我的代码有什么问题?提前感谢您的回答!
using (var ctx = new MyContext())
{
// worker thread id = n
SomeDto dto= await ctx.SomeDtoSet.Where(x => x.SomeDto Id == id).SingleOrDefaultAsync();
// worker thread id = n + 1
ctx.SaveChanges();
// ctx.SaveChangesAsync(); behaves similarly
}
【问题讨论】:
-
多个线程是否同时使用同一个数据库上下文实例?在示例代码中没有显示您如何使用线程。请在您的问题中包含问题的Minimal Complete Verifiable Example。
标签: c# asynchronous async-await entity-framework-6