2010-06-03 85 views
1

我有一个现在已有4年多的应用程序,它在我们的最新部署中表现出一些奇怪的行为。应用程序使用nHibernate进行所有插入/更新/选择等。我们当前使用.NET 2.0和nHibernate 1.2(我知道,我们需要升级)NHibernate不会插入记录

此部署位于Windows 2008 Server x64,IIS 7.5 - 到目前为止,我所看到的是应用程序运行,但无法插入或更新数据库中的记录 - 读取看起来很好,但写入是一个问题。有些写道实际上工作,插入到一些小表中,但大多数甚至没有写入数据库。

使用SQL事件探查器,插入/更新永远不会将它传送到服务器,并且将log4net变为DEBUG,并且show_sql为真 - 出现select语句,但插入/更新语句根本不会将它记录到日志中,并从不在服务器上显示。

更令人感到奇怪的是,应用程序似乎忘记了这一点 - commandandclose毫无例外地运行(打开httpmodule中的会话),域对象返回uuid的生成等等,但永远不会持久化。

当然升级到期了,但我不愿意在部署过程中尝试升级,也没有时间准确测试应用程序。有任何想法吗?

回答

0

这两个很好的答案,问题出在部署。 web.config是为IIS6设置的,并且对IIS7的部署没有正确设置用于提交事务的视图HttpModule中的打开会话。将管道模式从“集成”更改为“经典”可以解决问题。

1

退出当前的部署并返回到之前的状态。然后找出有人犯的错误。如果它用于插入,而现在不用,那么当前的代码有些问题。如果它没有创建插入/更新语句,那么我会首先查看它们应该创建的位置。当前的deplyment是否实际插入记录或在开发中更新它们?有没有人测试过,或者你是否依赖它没有弹出错误?如果它在开发中工作并且不能在产品中工作,我会考虑dev和prod之间的环境差异。

2

我的猜测是默认的ISession FlushMode已经从Auto改为Never或者Commit。从不意味着当应用程序调用Flush()时会话会刷新;提交意味着会话将在事务提交时刷新。