【发布时间】:2010-10-02 04:01:33
【问题描述】:
在我的 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:47,746 信息 NHibernate.Driver.DriverBase - 将 ADO.NET 命令超时设置为 0 秒
在最后的某个地方:
2010-10-02 07:36:03,020 调试 NHibernate.AdoNet.AbstractBatcher - 关闭 IDbCommand,打开 IDbCommand : 0 2010-10-02 07:36:03,382 错误 NHibernate.Event.Default.AbstractFlushingEventListener - 无法将数据库状态与会话同步 NHibernate.HibernateException:一个 执行时发生异常 批量查询---> System.Data.S qlClient.SqlException:超时 已到期。超时时间已过 手术完成前 或者服务器没有响应。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔型 breakConnection)
怎么会?如何解决这个问题?
【问题讨论】:
-
这是我假设的网络应用程序?
-
对不起,没有说明这一点。不,这是常规的桌面应用程序。
-
你在使用批处理 (
adonet.batch_size> 0) 吗?为什么你有一个 ActiveRecord 配置和一个单独的 NHibernate 配置?哪种 SQL 语句超时(更新/插入/选择/删除)?您使用的是哪个版本的 NHibernate 和 ActiveRecord? -
@Mauricio:是的,我使用的是 batch_size=1000。我有两种配置,因为过去我遇到过这样的情况,即一个键在 ActiveRecord 部分中定义,而另一个仅适用于 Nhibernate,所以我决定两者都有(也许这是错误的)。语句是插入,批量插入。 Nhibernate 是 2.1.2.4000,CastleProject 是 2.1.0.6692。
-
我有一个理论...尝试将batch_size设置为0,看看它是否仍然超时。请把结果发回这里。
标签: nhibernate timeout castle-activerecord sqlexception command-timeout