NHibernateでセッション管理の不具合を理解しようとしています。私は多くのトラブルがIoCとAOPの概念の知識不足に起因すると仮定しています。少なくともそれはファビオ・マウロが私の演出を続けているところで私が考えていることです。NHibernateのセッション管理と遅延ロード
とにかく、私の問題は、 "get"呼び出しを行い、結果をグリッドにバインドするwinフォームアプリケーションがあることです。バインド後、ユーザーは、ある種の「書き込み」アクションを実行し、そのセッションの結果は、セッションごとの使用の概念を使用しようとすると、書き込み後に閉じられます。その後、ユーザーはグリッドをスクロールして遅延ロードを開始させ、セッションが終了して例外が発生します。
私の見解をセッションに認識させたくないので、ユーザーがフォームを閉じるときにKillAllSessionsを送信したくありません。さらに、ユーザーはいつでも複数のフォームを開いて、そのメソッドに関連する問題をさらに複雑にすることができます。私は本質的に、これがすべて「舞台裏で」働くことを望んでいます。
これまでのところ、レイジーローディングコールを傍受し、セッションが開いているかどうかを確認し、再オープンしない場合は情報を取得して再閉じてください。しかし、私が知る限りでは、それほど多くはありませんが、これは本質的に遅延ロードがどのように機能するかです。これは、プロキシファクトリ(NHibernate.Bytecode.Castle)によってインターセプトされ、セッションを使用してデータを取得します。だから、私は実際にその呼び出しを傍受し、セッションを再開した後に元の意図した傍受に渡す必要があります。それが私の考えです。
私の質問は本質的にまず第一にこれは正しいことですか?それが二番目の場合、私はどこから始めるべきか分からない。私はメソッド呼び出しを傍受したことは一度もありませんでした。私は理論的には知っていましたが、実際にはそれを知りませんでした。私は、Rhino Commonsのようなものを行うライブラリがあることを知っていますが、私はこの機会を覚えてより良いプログラマになることを願っています。私はAOPとContext Bound Objectsを理解しようとしていますが、現在私はそれをgrokkingしていません。あなたの人の誰かが人を助けてくれますか?
非常に奇妙なことが起こります。セッションは終了後に処分されるべきです。あなたは例を挙げることができますか? – Paco
申し訳ありませんが、どの部分が変わっているようですか?一例として、私はこの問題に直面した一連のイベントをあなたに与える以外に何も知らない: 1.セッションを開く 2. IListの形でデータを取得する 3. ITypedカスタムコレクション 4.データグリッドにバインドします 5.任意の変更が行われます 6.この変更によりセッションが要求されます 7.セッションマネージャはすでに開いているセッションを手にします 8.書き込み機能であるため、完了したらセッションを終了します 9.ユーザーがグリッドをスクロールして遅延読み込みが発生する 10.セッションが開かれていないため例外がスローされる – joshlrogers
スクロール中に遅延読み込みが発生するのはなぜですか? – Paco