我们正在使用NHibernate和Fluent映射来构建WebForms应用程序。
在我们的模型中,我们与References
集合有一个简单的Cascade.All()
关系。当我们保存实体时,NH按预期运行,1)保存引用的实体,2)更新设置子键的父实体。
将此相同版本部署到我们的生产服务器(Win Server 2008)并将应用程序指向同一数据库会产生不同的输出。 NH 1)保存引用的实体和..而且......就是这样,没有其他事情发生!!
我知道我们的测试和生产环境应该是相同的等等。但是我们现在正在部署,而我根本无法弄清楚这是如何发生的。
在Win 2008 Server中有关于程序集权限或类似问题的NH是否存在任何已知问题?看起来代理由于某种原因无法正常工作,但我真的不知道为什么!
编辑1:分析NH日志文件我发现NH没有注意到Win Server 2008中引用的属性发生了变化。为什么?不知道,但它看起来越来越像代理问题。
非常感谢任何帮助。
菲利普
答案 0 :(得分: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兼容性消息(为什么有人这样做?)。
菲利普