在我的C#.NET 3.5应用程序中,我通过NHibernate使用CastleProject ActiveRecord。这是使用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信息 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 - 与会话 NHibernate.HibernateException未能进行SYN chronize数据库状态:在执行时发生 例外 批查询---> System.Data.S qlClient.SqlException:超时 已过期。在完成操作 之前已经超时了 或者服务器没有响应。在 System.Data.SqlClient.SqlConnection.OnError(SQLEXCEPTION 例外,布尔breakConnection)
怎么来的?如何解决这个问题?
一个Web应用程序,我假设? – hardba11 2010-10-02 04:56:49
对不起,没有说明这一点。不,这是常规的桌面应用程序。 – Alex 2010-10-02 05:21:00
您使用批处理('adonet.batch_size'> 0)吗?为什么你有一个ActiveRecord配置*和*一个单独的NHibernate配置?什么样的SQL语句超时(更新/插入/选择/删除)?你使用的是什么版本的NHibernate和ActiveRecord? – 2010-10-02 16:23:10