2017-05-29 89 views
0

我有流利NHibernate的緩存問題。我想禁用它以便通過ID查詢,例如流利的NHibernate禁用緩存

session.Get<Person>(10); 

您有什麼想法嗎?

+1

如果你能解釋你有多一點的問題,這將是一件好事。 –

+0

您可能會問如何對您的實際麻煩應用錯誤的解決方案。 –

回答

1

您是指第一級(會話)緩存嗎?
可以使用刷新來刷新從數據庫中一個實體的狀態,即:

// Will get the state from the first-level cache if already present in the session: 
var entity = Session.Get<EntityType>(entityId); 

// Line below will update the entity with the current state from the database: 
Session.Refresh(entity); 
+0

如果實體尚未處於緩存中,這將導致對數據庫進行兩次查詢。 –

+0

的確如此。我相信如果情況如上所述(您沒有對要刷新的實體的引用),可以使用Session.Load而不是Session.Get來避免這種情況。 –

1

如果你已經持有的實體,而不是直接調用session.Refresh(person)上再次得到它的。

您也可以用session.Evict(person)驅逐它,導致它不再出現在會話中,也無法追蹤更改。然後丟棄它,並最終在需要時再次使用它。

否則,這是不尋常的,認爲它是從會話緩存中得到它的麻煩。這通常是會話使用不良的標誌,例如跨許多用戶交互(反模式)使用同一會話。

你仍然可以做什麼Fredy proposes。或者在清除會話緩存之前調用session.Clear()(並通過這種方式丟失所有未決的更改)。