2010-09-23 45 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事件侦听器或拦截器。