NHibernate - 如何迭代附加到会话的持久实体?

时间:2010-09-23 02:18:40

标签: nhibernate

如果我在给定会话上调用Flush(),我需要检查将保留的附加实体集。 (我正在编写代码,在保存之前访问Session作为通用管道的一部分,并且可以在任意数量的上下文中使用。)

我发现自己希望有一种像

这样的方法

mySession.GetPersistentEntities()

所以我可以检查它们并执行一些预处理。

任何人都知道这样做的方法吗?

谢谢,

杰夫

2 个答案:

答案 0 :(得分:4)

不,NHibernate的ISession不公开这样的东西。你可以:

  • 自行跟踪这些实例(不推荐)
  • 使用标准的NHibernate机制:
    • 事件侦听器(例如IFlushEventListener,ISaveOrUpdateEventListener)
    • 拦截器(IInterceptor.OnFlushDirty(),OnSave())

答案 1 :(得分:2)

您可以“入侵”会话上下文:

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

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

但是,在你的情况下,我会使用flush事件监听器或拦截器。