NHibernate Interceptor для изменения уровня транзакции - PullRequest
1 голос
/ 31 декабря 2010

Попытка использовать 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/

1 Ответ

0 голосов
/ 31 декабря 2010

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

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

...