В моем приложении C# .NET 3.5 я использую CastleProject ActiveRecord над NHibernate. Это настольное приложение с использованием MS SQL Server 2008. Я поставил команду таймаут ADO в 0, чтобы предотвратить исключение тайм-аут во время массовых операций:Исключение таймаута, когда тайм-аут установлен на бесконечное время
<activerecord>
<config>
...
<add key="hibernate.command_timeout" value="0" />
</config>
</activerecord>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
...
<property name="command_timeout">0</property>
</session-factory>
</hibernate-configuration>
Однако, я все еще получаю исключение тайм-аут! Журнал NHibernate показывает что-то вроде этого:
Где-то в начале:
2010-10-02 06: 29: 47746 INFO NHibernate.Driver.DriverBase - установка команды ADO.NET таймаут 0 секунд
Где-то в конце:
2010-10-02 07: 36: 03020 DEBUG NHibernate.AdoNet.AbstractBatcher - Закрытой IDbCommand, открытая IDbCommand s: 0 2010-10-02 07: 36: 03382 ERROR NHibernate.Event.Default.AbstractFlushingEventListener - Не удался син chronize состояния базы данных с сессией NHibernate.HibernateException: Произошло исключение при выполнении пакетные запросы ---> System.Data.S qlClient.SqlException: тайм-аут истек. Промежуток времени истекает до завершения операции или сервер не отвечает. в System.Data.SqlClient.SqlConnection.OnError (SqlException исключение, Boolean breakConnection)
Каким образом? Как это исправить?
это веб-приложение, я предполагаю? – hardba11
Извините, не сказал этого. Нет, это обычное настольное приложение. – Alex
Вы используете дозирование ('adonet.batch_size'> 0)? Почему у вас есть конфигурация ActiveRecord * и * отдельная конфигурация NHibernate? Какая инструкция SQL выдает время (обновление/вставка/выбор/удаление)?Какую версию NHibernate и ActiveRecord вы используете? –