在SQLite上使用NHibernate时获取“Dababase被锁定”(没有事务的多进程)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SQLite上使用NHibernate时获取“Dababase被锁定”(没有事务的多进程)相关的知识,希望对你有一定的参考价值。
我正在使用Nhibernate而非SQLite从许多进程同时读取10个表。即使我不使用事务来做这件事,我仍然得到“数据库被锁定”。在不同的过程中,每个表读取都会扰乱另一个表。
我在C#中创建了一个简单的应用程序,它使用System.Data.SQLite来重现问题。但一切都很完美。问题出在我使用NHibernate时。
有谁知道这里有什么问题?谢谢你的帮助。
答案
您尚未提供配置代码;所以很难猜到。你设置的IsolationLevel
是什么?将其设置为ReadCommitted
应该可以解决问题。
使用Config-By-Code,可以设置如下:
configuration.SetProperty(NHibernate.Cfg.Environment.Isolation, "ReadCommitted");
使用XML配置,可以设置如下:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.isolation">ReadCommitted</property>
</session-factory>
</hibernate-configuration>
或者,您可以在开始交易时进行设置,如下所示:
session = SessionFactory.CreateSession();
transaction = session.BeginTransaction(isolationLevel);
This可能对您有用。
以上是关于在SQLite上使用NHibernate时获取“Dababase被锁定”(没有事务的多进程)的主要内容,如果未能解决你的问题,请参考以下文章
使用 SQLite“没有这样的表”测试 NHibernate - 生成模式
通过(Fluent)NHibernate添加到SQLite DB时,DateTime不正确
NHibernate 与 C#-Sqlite 在 > .NET 2.0 中没有 DbConnection
在我的 NHibernate / SQLite 项目中提交非常慢