Entity Framework 6 System.Threading.ThreadAbortException - PullRequest
0 голосов
/ 29 мая 2018

В методе модульного тестирования я систематически получаю ThreadAbortException всякий раз, когда я вызываю SaveChanges или SaveChangesAsync (в экземпляре Entity Framework 6 DbContext) после другого вызова асинхронного метода, например SingleOrDefaultAsync или ToListAsync.

Похоже, что вызов SaveChanges/SaveChangesAsync в другом потоке, чем тот, который создал экземпляр DbContext, является причиной проблемы, что странно.Насколько мне известно, нет ничего необычного в том, что выполнение кода после ключевого слова 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
}

1 Ответ

0 голосов
/ 29 мая 2018

Возможно несколько потоков, использующих MyContext. Вы можете создать новый экземпляр и попробовать его.Можете ли вы проверить это с помощью try-catch

using (var ctx = new MyContext()){
try{
// worker thread id =  n
SomeDto dto= await ctx.SomeDtoSet.Where(x => x.SomeDto Id == id).SingleOrDefaultAsync();
// worker thread id =  n + 1
ctx.SaveChangesAsync();
catch (ThreadAbortException ex)
{
Thread.ResetAbort();
}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...