【问题标题】:Getting "Dababase is locked" while using NHibernate over SQLite (multi-processes without transactions)在 SQLite 上使用 NHibernate 时获取“Dababase 已锁定”(没有事务的多进程)
【发布时间】:2019-09-03 23:27:31
【问题描述】:

我在 SQLite 上使用 Nhibernate 从多个进程中同时读取 10 个表。 即使我不使用事务来执行此操作,我仍然会收到“数据库已锁定”。在不同的过程中,每张桌子的读数都会干扰另一张桌子。

我在 C# 中创建了一个简单的应用程序,它使用 System.Data.SQLite 来重现问题。但一切都很完美。 只有当我使用 NHibernate 时才会出现问题。

有谁知道这可能是什么问题? 感谢您的帮助。

【问题讨论】:

  • 不确定它是否对您有帮助,但我遇到了同样的问题(不使用 NHibernate)。我最终使用了ReaderWriterLockSlim,它允许多个读者但只有一个作者

标签: c# sqlite nhibernate


【解决方案1】:

您没有提供配置代码;所以很难猜。您设置的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 可能对你有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多