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, которое вы упомянули.

Другие вопросы по тегам