長期にわたるナイベナートセッションデータを一貫して維持する方法は?

StackOverflow https://stackoverflow.com/questions/3754592

質問

私は、ASP.NETセッションでキャッシュされたNhibernateセッションを持っています。

ユーザーがオブジェクトを編集した状況に出会いました。次に、別のユーザーが同じオブジェクトを編集しました。

この時点で、user1は、user2がオブジェクトの正しい状態を見ると、編集の元のバージョンをまだ表示しますか?

常にすべてのオブジェクトに対して、手動でsession.refresh.refresh(myobj)を明示的に呼び出すことなく、これを処理する正しい方法は何ですか?

また、2番目のレベルのキャッシュを有効にしています。 Nhibernateの長いセッションについては、最初のレベルのキャッシュを完全に無効にする必要がありますか?

編集: 私が達成しようとしているものにいくつかのより多くの用語を追加する 10.4.1。自動バージョン化との長いセッション このセクションの終わりはで終わります

ISESSIONは(必須の)第1レベルのキャッシュであり、すべてのロードされたオブジェクトが含まれているため、この戦略は数回の要求/応答サイクルでのみ使用できます。 ISESSIONにはまもなく古いデータがあるため、これは実際に推奨されます。

これがどんな種類のドキュメントであるかはわかりませんが、おそらくセッションに古いデータがあるとすぐに言うことができます(これが私が見ているものです)。ここにこれの解決策は何ですか、それとも何もありませんか?

役に立ちましたか?

解決 3

どうやら、これは私の質問で引用された文書で詳述されているように、Nhibernateの既知の欠点です。

他のヒント

  • 第1レベルのキャッシュを無効にすることはできません。
  • チェックアウト "楽観的な並行性制御「nhibernateドキュメントで。
  • また、見てください nhibernate.burrow 長い会話のために。

ISESSIONの代わりにISTATERESSSESSIONを使用するだけです。

また、NHは、長年のアイスションで使用されるように設計されていなかったことに留意してください(すでに他の人が述べたように)。 1つの問題は、すでに言及したことです。もう1つは、NHで追跡された大きなオブジェクトグラフがある場合、パフォーマンスが大幅に低下することです。両方の問題は、ISTATERESSESSIONを使用することで回避できます。 NHによって追跡されていないデタッチされたオブジェクトが得られます。

ASP.NETセッションでセッションを維持する背後にある理由についてはわかりません。多分あなたはいくつかの詳細を提供することができますか?

また、セッションはIDBConnectionのラッパーであることを忘れないでください。それを開いたままにしておくと、コネシトンプールの飢vに簡単につながる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top