EF6. Сохранить информацию об исключении в базу данных после транзакции отката - PullRequest
0 голосов
/ 09 января 2020

Мне нужно сохранить информацию об исключении в базе данных.

т.е.

SomeMethod() 
{
    try 
    {
         using(transaction = context.beginTransaction())
         {
             try 
             {
                 // here is the database error
                 await transaction.CommitAsync();
             } 
             catch(Exception e)
             {
                 await transaction.Rollback();
                 throw;
             }
         } 
    }
    catch(Exception exception) 
    {
        // Here I get the same error that was generated inside the transaction
        context.Set<LogEntity>().Add(new LogEntity(....));
        await context.SaveChangesAsync();
    } 
}

Правильно ли я понимаю, что контекст - это соединение с базой данных и что в одном контексте Я могу выполнить несколько транзакций?

Насколько я понимаю, контекст на этом этапе находится в грязном состоянии?

Как выполнить запись в базу данных после ошибки транзакции?

1 Ответ

0 голосов
/ 10 января 2020

Насколько я понимаю, контекст на этом этапе находится в грязном состоянии?

Правильно. «Ошибка базы данных» должна происходить при вызове SaveChanges(Async), поэтому, если вы повторите этот вызов в том же контексте, исключение произойдет снова. Решение простое: используйте новый контекст в блоке catch.

Примечание: перехват исключения в блоке using не требуется. Если транзакция не была подтверждена до ее удаления, она будет отменена.

...