ReadUncommitted не работает в SQLite против NHibernate
Я использую sqlite для тестовых случаев в проекте, который использует NHibernate. Все работает отлично, кроме случаев, когда я пытаюсь создать транзакцию ReadUncommitted:
например, Session.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)
Сообщение об ошибке:
"IsolationLevel"
(вот и все)
Стек вызовов выглядит так:
at System.Data.SQLite.SQLiteConnection.BeginDbTransaction(IsolationLevel isolationLevel)
at System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction(IsolationLevel isolationLevel)
at NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel)
Если я переключаюсь на другой уровень изоляции (например, сериализованный или readcommitted), все выполняется правильно.
Идеи?
NHibernate 2.1.2
SQLite (.NET version) 1.0.65.0
Fluent NHibernate 1.0
2 ответа
Знаете ли вы, что ReadUncommitted вернется в сериализованную изоляцию, если вы не включили общий кэш, и оба соединения не принадлежат одному потоку? Возможно, кто-то пытается спасти вас от себя?
SQLite (или, по крайней мере, его поставщик ADO.NET) поддерживает только уровни изоляции Serializable и ReadCommitted (и, конечно, Unspecified, по умолчанию Serializable).
Любое другое значение вызывает исключение ArgumentException, которое вы упомянули.