ReadUncommitted在SQLite中针对NHibernate打破了

时间:2010-02-17 19:28:38

标签: nhibernate sqlite isolation-level

我在一个利用NHibernate的项目中使用sqlite进行测试用例。一切都很好,除非我尝试创建一个ReadUncommitted事务:

e.g。 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 个答案:

答案 0 :(得分:7)

除非您启用了共享缓存并且两个连接来自同一个线程,否则您是否知道ReadUncommitted将恢复为Serialized隔离?也许有人试图拯救你自己?

答案 1 :(得分:6)

SQLite(或者至少是它的ADO.NET提供者)only supports Serializable and ReadCommitted isolation levels(当然还有Unspecified,默认为Serializable)。

任何其他值都会抛出您提到的ArgumentException。