1

我们使用 NHibernate 和 Fluent 映射来构建 WebForms 应用程序。

在我们的模型中,我们References与集合有一个简单的关系Cascade.All()。当我们保存实体时,NH 会按预期运行,并且 1) 保存引用的实体,2) 更新父实体设置子键。

但是,将相同版本部署到我们的生产服务器(Win Server 2008)并将应用程序指向相同的数据库会产生不同的输出。NH 1) 保存引用的实体,然后.. 就这样,没有其他事情发生!

我知道我们的测试和生产环境应该是相同的,等等等等。但是我们现在正在部署,我根本不知道这是怎么发生的。

Win 2008 Server 中的 NH 是否存在关于程序集权限或类似问题的任何已知问题?看起来代理由于某种原因无法正常工作,但我真的不知道为什么!

编辑 1:分析 NH 日志文件我发现 NH 没有注意到 Win Server 2008 中引用的属性发生了变化。为什么?不知道,但它看起来越来越像代理问题。

非常感谢任何帮助。

菲利普

4

1 回答 1

0

我终于找到了导致问题的原因。NH 没有更新关系,因为它没有涉及报表的交易。

乍一看,它看起来不合逻辑,但在其他情况下,NH 只有在您打开事务时才能正常运行(例如:NHibernate FlushMode Auto Not Flushing Before Find)。我们在另一个项目中也遇到过这种情况,而且理论很合适。

但是 Windows Server 2008 呢?实际上,问题出在我们使用 IIS 7 的 web.config 文件中。当我们使用具有 OpenSessionInView 设计的自动事务控制时,我们注册了一个httpModules项目。但是在 IIS 7 中,我们必须注册一个modules项目,而我们没有它。由于没有配置,我们没有事务,没有事务,事情就不起作用。

经验教训 #1:在使用 NHibernate 时,事务是必须的。经验教训#2:永远不要禁用 IIS 兼容性消息(为什么有人这样做?)。

菲利普

于 2010-08-31T15:22:44.530 回答