#c# #sqlite #nhibernate
#c# #sqlite #nhibernate
Вопрос:
Я использую Nhibernate поверх SQLite для одновременного чтения 10 таблиц из многих процессов. Даже если я не использую транзакции для этого, я все равно получаю «База данных заблокирована». Каждое чтение таблицы нарушало другое в другом процессе.
Я создал простое приложение на C #, которое использует System.Data.SQLite, чтобы воспроизвести проблему. Но все работало идеально. Проблема возникает только тогда, когда я использую NHibernate.
Кто-нибудь знает, в чем здесь может быть проблема? Спасибо за любую помощь.
Комментарии:
1. Не уверен, что это полезно для вас, но у меня была такая же проблема (без использования NHibernate). В итоге я использовал a
ReaderWriterLockSlim
, который позволяет нескольким читателям, но только одному писателю
Ответ №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);
Это может быть вам полезно.