2011-12-26 88 views
0

我有多個會話同時在我的數據庫中工作。 (常規數據庫會話和NHibernate會話)第一級高速緩存中陳舊的數據

第一次當我從D.B獲得實體時,該實體存儲在第一級緩存 - 身份映射中。

如果在第一次查詢後發生了什麼實體在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 2011-12-27 18:19:39

+0

您是否正在尋找每次在所有會話中進行提交時自動刷新所有實體的實體?你可以做消息(即廣播更新消息到所有會話容器),但我會使用樂觀併發。 – 2011-12-27 18:49:34

+0

只需更新其他會話中已更改的實體(不是NH會話)。不需要刷新所有會話標識映射。 – gdoron 2011-12-27 18:51:58