Получение «Dababase заблокирован» при использовании NHibernate поверх SQLite (многопроцессорность без транзакций) - PullRequest
0 голосов
/ 13 апреля 2019

Я использую Nhibernate поверх SQLite для чтения 10 таблиц одновременно из многих процессов.Даже если я не использую транзакции для этого, я все равно получаю «База данных заблокирована».Каждое чтение таблицы мешало другому в отдельном процессе.

Я создал простое приложение на C #, которое использует System.Data.SQLite для воспроизведения проблемы.Но все работало отлично.Проблема только тогда, когда я использую NHibernate.

Кто-нибудь знает, в чем может быть проблема здесь?Спасибо за любую помощь.

1 Ответ

1 голос
/ 13 апреля 2019

Вы не предоставили код конфигурации;так что трудно догадаться.Что за 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);

Этот может быть полезен для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...