NHibernate Interceptor для изменения уровня транзакции

Попытка использовать SQLite для модульного тестирования, которое работает нормально, однако тестирование некоторых репозиториев является вероятным, поскольку они используют транзакции.

Для транзакций, использующих ReadCommitted, все в порядке, однако некоторые из них используют ReadUncommitted, который, глядя на System.Data.SQLite, не поддерживает:

if ((this._defaultIsolation != IsolationLevel.Serializable) && (this._defaultIsolation != IsolationLevel.ReadCommitted))
{
        throw new NotSupportedException("Invalid Default IsolationLevel specified");
}

Мне интересно, можно ли перехватить Session.BeginTransaction (...), чтобы я мог изменить уровень транзакции только для модульных тестов.

Обновление: Мое решение заключалось в том, чтобы загрузить исходный код для System.Data.SQLite и изменить исключения, чтобы установить уровень изоляции по умолчанию. Я писал об этом в блоге:

http://www.philliphaydon.com/2011/01/system-data-sqlite-isolationlevel-exception/


person Phill    schedule 31.12.2010    source источник


Ответы (1)


Для этого не существует простых точек расширения, кроме реализации ITransactionFactory и ITransaction.

Вероятно, проще обернуть вызов BeginTransaction, чтобы избежать использования ReadUncommitted при тестировании.

person Diego Mijelshon    schedule 31.12.2010
comment
Да, это то, чего я хотел избежать, поскольку это влияет только на модульное тестирование, а не на приложение. В конце концов, вчера вечером я загрузил исходный код для System.Data.SQLite и изменил две проверки, которые он выполняет для уровня изоляции, и изменил его на сериализуемый вместо того, чтобы генерировать исключение. - person Phill; 01.01.2011