在我的 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: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
异常,布尔中断连接)
怎么会?如何解决这个问题?
值 0 表示没有超时,这是正确的(如MSDN 文档中定义 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx),然而当, 配料机的条件.
因此,当您设置批处理且超时值为 0 时,该值不会传递到 db 命令,因此它仍为默认值。
这完全有可能是设计使然,并且 NHibernate 开发人员故意禁用批处理场景的超时。无论如何,禁用超时都是一个坏主意,如果您遇到超时错误,我会提高该值,但不会禁用它。
请与 NHibernate 开发人员确认这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)