2011-12-26 14 views
0

私のデータベースでは複数のセッションが同時に働いています。 (通常のDBセッションとNHibernateセッション)第1レベルのキャッシュの古くなったデータ

D.B.からエンティティを初めて取得したとき。エンティティは第1レベルのキャッシュ・アイデンティティ・マップに格納されます。

最初のクエリ後にどうなるかエンティティがNHセッションの外で変更されましたか?データは古くなっています。

session.Get<Cat>(1).Name == "Bar" // true 
// different session trigger updated the cat name to "Foo"  
session.Get<Cat>(1).Name == "Bar" // true 

NHibernateセッションをセッション外の変更と同期させる方法はありますか?簡単だ

答えて

2

session.Refresh(cat); 
+0

いつものように修正して便利...私は、オブジェクトを更新する前に変更が発生した場合について。エンティティが変更されていないことを確認するために、すべての行を更新するように書き留めたくありません。あなたは私のために何かを持っていますか? – gdoron

+0

いずれかのコミットがあるたびに、すべてのセッションのすべてのエンティティを自動リフレッシュしたいのですか?メッセージング(つまり、すべてのセッションコンテナへの更新メッセージのブロードキャスト)はできますが、代わりに楽観的な並行性を使用します。 –

+0

他のセッション(NHセッションではない)で変更されたエンティティを更新するだけです。すべてのセッションアイデンティティマップをリフレッシュする必要はありません。 – gdoron

関連する問題