ASP. NET MVC Asyn c - Ожидание при работе EF. Как отлаживать и как обрабатывать ошибки? - PullRequest
1 голос
/ 27 февраля 2020

У меня проблема с ASP. NET MVC контроллером и асинхронной c операцией в контексте EF. Если возникает проблема (исключение) в entityContext, я не вижу / перехватываю / отлаживаю исключение, выполнение немедленно возвращается на конвейер asp. net и (в моем случае) я вижу 500. html стр. Это код, в котором у меня нет никакого контроля:

RENEWAL renewal;
using (var db = new MyEntities()) //Breakpoint #1
{
    try
    {
        renewal = await db.RENEWAL.FindAsync(id, ctr);
    }
    catch (AggregateException ex)
    { //breakpoint #2
        throw;
    }
    return View(renewal); //Breakpoint #3
}

Я могу отладить с точкой останова # 1, а в операции «FindAsyn c» возникает ошибка, но и точка останова № 2, и # 3 никогда не достигаются.

Итак, я изменил код следующим образом:

RENEWAL renewal;
using (var db = new MyEntities())
{
    try
    {
        renewal = await db.RENEWAL.FindAsync(id, ctr)
                          .ContinueWith(t =>
                           {
                               Debug.Print("Continue With");
                               return t.Result; //breakpoint #2
                           });
    }
    catch (AggregateException ex)
    { //breakpoint #3
        throw;
    }
    return View(renewal); //Breakpoint #4
}

Теперь точки останова № 2 и № 3 работают.

Я не сделал Я не совсем понимаю, как работает asyn c / await в MVC контроллере. Можете ли вы сказать мне разницу между первым и вторым блоком, и если есть правильный способ управления этими операциями в направлении EF от контроллера? Спасибо

1 Ответ

2 голосов
/ 27 февраля 2020

, поскольку тип исключения больше не соответствует 'AggregateException', вам нужно перехватить базу 'Exception' и проверить ее тип.

...