Подтвердить что ты не робот

Откат DbContextTransaction

Entity Framework 6 представил новый способ поддержки транзакций в DbContext с помощью метода BeginTransaction:

var db = new MyDbContext();
using(var tx = db.Database.BeginTransaction())
{
    // update entities
    try
    {
        db.SaveChanges();
        tx.Commit();
    }
    catch(Exception)
    {
        tx.Rollback();
    }
}

Требуется ли вызов Rollback() в методе? Что произойдет, если оно не вызвано исключением? Я знаю, что при использовании TransactionScope он автоматически откатывается от транзакции, когда он будет удален, а Complete не вызывается. Соответствует ли поведение DbContextTransaction?

4b9b3361

Ответ 1

Нет необходимости явно обращаться к откату. Переменная tx будет удалена, когда блок использования завершится, и транзакция будет отменена, если Commit() не был вызван.

Я проверил это с помощью монитора активности SQL Server, наблюдая за блокировками, хранящимися на объектах базы данных, а также запросил базу данных, чтобы наблюдать, когда данные откатываются, используя подсказку nolock в моем операторе select, чтобы иметь возможность для просмотра незафиксированных изменений в базе данных.
Например. select top 10 * from [tablename] (nolock) order by modifiedDate