2010-09-23 42 views
3

我需要檢查一組連接的實體,如果我在給定的會話上調用Flush(),將會持續這些實體。 (我正在寫訪問會話的通用管道的一部分保存,它可以在任何數量的情況下使用之前的代碼。)NHibernate的 - 如何迭代持續的實體連接到會話?

我發現自己希望有就像

MySession的方法。 GetPersistentEntities()

所以我可以檢查它們並執行一些預處理。

任何人都知道一種方法來做到這一點?

感謝,

傑夫

回答

4

不,NHibernate的ISession的不公開這樣的事情。您可以:

  • 跟蹤這些實例自己(不推薦)
  • 使用標準NHibernate的機制:
    • 事件偵聽器(如IFlushEventListener,ISaveOrUpdateEventListener)
    • 攔截器(IInterceptor.OnFlushDirty() OnSave())
2

你可以在會話上下文中有點「入侵」:

ISession session; 
var sessionContext = session.GetSessionImplementation().PersistenceContext; 

foreach(var entity in sessionContext.EntitiesByKey.Values) 
{ 
    // do anything with the entity 
} 

但是,在你的情況下,我會使用flush事件偵聽器或攔截器。