每隔一段時間我的任務就是對數據庫中的一個或多個業務實體進行修改,這些業務實體可能已經緩存在我們的內部應用程序中。爲了讓應用程序能夠反映這些更改而不必循環使用應用程序池,我想我會嵌入開發/管理員從應用程序的用戶界面(完全或特定對象)中驅逐緩存的能力,但我注意到該方法狀態如下...SessionFactory.Evict的副作用?
/// <summary>
/// Evict an entry from the process-level cache. This method occurs outside
/// of any transaction; it performs an immediate "hard" remove, so does not respect
/// any transaction isolation semantics of the usage strategy. Use with care.
/// </summary>
void ISessionFactory.Evict(Type persistentClass, object id);
究竟是什麼意思?如果我試圖驅逐可能涉及交易的一個或多個對象,並且無論如何要避免這些副作用(如果它們具有破壞性),會出現什麼問題?我目前正在使用SysCache2,並且正在尋找如何使用SqlDependency的實現細節,但我仍然對Evict效果同時感到好奇。
UPDATE:在觀看的意見接近,看來SessionFactory.Evict()
和SessionFactory.EvictCollection()
從工藝水平緩存中刪除,並從SessionFactory.EvictEntity()
第二級緩存中刪除。然而,兩種風味都存在相同的聲明。所以我原來的問題仍然存在。如果某個實體正在另一個事務中使用,那麼從緩存中刪除(進程或第二級)實體有什麼危險?
如果Evict旨在從會話中分離對象,如何從第二級緩存中使對象失效/驅逐出來? –
通過SessionFactoty.Evict()和SessionFacyory.EvictCollection() –
第二級緩存驅逐然後我認爲你誤解了我最初的問題,我想知道'SessionFactory.Evict()'的副作用,而不是'Session.Evict )'。我會修改評論代碼塊來表明這一點,但它已經在問題標題中提到了。 –