Я использую sqlite в памяти дБ (строка подключения: Источник данных =: память:; Версия = 3; Новый = True;) + Замок ActiveRecord, используя C #
Код доступа к БД выглядит так:
using(TransactionScope())
{
// do ActiveRecord objects modifications
}
Когда транзакция будет удалена / подтверждена, появится следующее исключение:
NHibernate.TransactionException occurred
Message="Commit failed with SQL exception"
Source="NHibernate"
StackTrace:
at NHibernate.Transaction.AdoTransaction.Commit()
InnerException: System.Data.SQLite.SQLiteException
Message="Library used incorrectly\r\nNo transaction is active on this connection"
Source="System.Data.SQLite"
ErrorCode=-2147467259
StackTrace:
at System.Data.SQLite.SQLiteTransaction.IsValid(Boolean throwError) in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteTransaction.cs:line 166
at System.Data.SQLite.SQLiteTransaction.Commit() in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteTransaction.cs:line 67
at NHibernate.Transaction.AdoTransaction.Commit()
Насколько я понял проблема из режима sqlite "autocommit". В исходном коде System.Data.SQlite я нашел следующие строки:
if (_cnn._transactionLevel == 0 || _cnn._sql.AutoCommit == true)
{
_cnn._transactionLevel = 0; // Make sure the transaction level is reset before returning
if (throwError == true) throw new SQLiteException((int)SQLiteErrorCode.Misuse, "No transaction is active on this connection");
else return false;
}
Как правильно настроить соединение sqlite для использования ActiveRecord / Nhibernate TransactionScope? (отключить автокоммит? что-то еще?)