モノレール、Nhibernate、およびRequest Pertersのセッションパターン
-
14-10-2019 - |
質問
私は、私たちのウェブアプリにやろうとしているリファクタリングについての洞察と考えが必要です。
最初に、httpapplicationでon_beginrequest / on_endrequestを使用してセッションを作成および廃棄することにより、NhibernateおよびActivereCordを使用したリケストパーパターのセッションパターンを使用しました。後で、DB関連の例外がモノレールコンテキストの外に投げ込まれたことを認識しました。つまり、救助は蹴られなかったことを意味します。アクション、場合によっては望ましい場合があります。
そのため、ベースコントローラーのinitialize() / Contextualize()でセッションを作成するように書き直し、ベースコントローラーの紛争()にそれらを処分しました。また、DBの半分の書面による変更を防ぐために、レスキューコントローラーのセッションをロールバックします。ここまでは順調ですね。 dispose()でそれを行う理由は、セッションを取得する必要があるビューコンポーネントと同じくらい怠zyなロードの理由のために、ビューレンダリングを通じて生きたいからです( viewcomponents、しかし、彼らは処分を持っているようには見えません()...)
しかし、私は、ロールバックされたりコミットされたりしていないDBのトランサッセーションを開始したいくつかのデッドロックの問題を経験しています。 。
だから私はこの記事を見つけました: http://hackingon.net/post/nhibernate-session-per-request-with-aspnet-mvc.aspx
そして、「フィルター、モノレールでもそれを使用できます!」と思いました。
私の質問は次のとおりです。
- フィルターで例外が発生した場合はどうなりますか?
- アクションまたはレンダリングで例外が発生した場合でも、火災が発生しますか?
- このアプローチをお勧めしますが、そうでない場合は、代わりにあなたの提案は何ですか?
どんなポインターもとても感謝しています!
解決
例外ハンドリングをケアするには、アプリケーションエラーハンドラーが必要です。
デバッガーを添付して調べてください。
おそらくそうではありません(私の記事ですが)。 Renderactionで動作しません。 IOCコンテナを使用して、接続の寿命を制御するのが最善です。