在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 项目中提交非常慢

NHibernate、SQLite 和 Cyrillic 字符:区分大小写和回退查询

Fluent NHibernate and Mysql,SQLite