При попытке использовать SQLite с System.Transactions TransactionScope с генератором удостоверений в качестве приращения я заметил, что получаю исключение (приведенное ниже вместе с кодом), когда NHibernate пытается получить следующий номер удостоверения.
Похоже, это связано с тем, что новое соединение SQLite выполняет автоматическую регистрацию текущей транзакции.Из того, что я слышал, SQLite поддерживает только одну транзакцию записи, но должен поддерживать несколько операций чтения, поэтому я удивлен тем, что получаю исключение блокировки базы данных для операции чтения.Кто-нибудь использовал SQLite с Transaction Scope таким образом.
Тот же код работает нормально, если я использую транзакцию NHibernate вместо TransactionScope
Блок кода:
using (var scope = new TransactionScope())
{
var userRepository =
container.GetInstance<IUserRepository>();
var user = new User();
userRepository.SaveOrUpdate(user);
scope.Complete();
}
Исключение:
19:34:19,126 ERROR [ 7] IncrementGenerator [(null)]- could not get
increment value
System.Data.SQLite.SQLiteException: The database file is locked
database is locked
at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
at System.Data.SQLite.SQLiteTransaction..ctor(SQLiteConnection
connection, Boolean deferredLock)
at System.Data.SQLite.SQLiteConnection.BeginTransaction(Boolean
deferredLock)
at System.Data.SQLite.SQLiteConnection.BeginTransaction()
at System.Data.SQLite.SQLiteEnlistment..ctor(SQLiteConnection cnn,
Transaction scope)
at
System.Data.SQLite.SQLiteConnection.EnlistTransaction(Transaction
transaction)
at System.Data.SQLite.SQLiteConnection.Open()
at NHibernate.Connection.DriverConnectionProvider.GetConnection()
at NHibernate.Id.IncrementGenerator.GetNext(ISessionImplementor
session)
19:34:20,063 ERROR [ 7] ADOExceptionReporter [(null)]- The database
file is locked
database is locked