1

NHibernate と Fluent マッピングを使用して、WebForms アプリケーションを構築しています。

私たちのモデルでは、セットとの単純なReferences関係がありCascade.All()ます。エンティティを保存すると、NH は期待どおりに動作し、1) 参照されたエンティティを保存し、2) 子キーを設定して親エンティティを更新します。

ただし、この同じバージョンを本番サーバー (Win Server 2008) にデプロイし、アプリケーションを同じデータベースに向けると、異なる出力が生成されます。NH 1) 参照されたエンティティを保存し、..そして..それだけです。他には何も起こりません!!

テスト環境と本番環境は同じである必要があることはわかっていますが、現在展開中であり、これがどのように発生するのかわかりません。

アセンブリのアクセス許可などに関して、Win 2008 Server の NH に関する既知の問題はありますか? なんらかの理由でプロキシが正しく機能していないように見えますが、その理由はわかりません!

編集 1: NH ログ ファイルの分析 参照されているプロパティが Win Server 2008 で変更されたことを NH が認識していないことがわかりました。なぜですか? わかりませんが、ますますプロキシの問題のように見えます。

どんな助けでも本当に感謝しています。

フィリペ

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 に答える