对于未刷新的实体,NHibernate相当于Entity Framework DbSet.Local?

时间:2011-06-30 15:36:42

标签: nhibernate entity-framework

在Entity Framework 4.1(代码优先)中,DbContext中的每个DbSet都有一个.Local实体集合,这些实体已添加到上下文中但尚未保存。

在NHibernate 3.1中,当我创建一个实体并保存它时,在刷新会话之前它不会提交到数据库。我可以手动调用Session.Flush,也可以在提交事务时依赖自动刷新。

但是在刷新会话之前,如何查询会话中的未刷新实体?在EF中,我可以看看DbSet.Local,但我没有看到NHibernate中的任何等效。如果我丢失了对新创建的实体的引用但我的会话仍处于打开和未刷新状态,那么在没有提交更改并重新查询数据库的情况下,是否无法恢复实体?

2 个答案:

答案 0 :(得分:2)

NHibernate不会暴露像EF的DbSet.Local那样的东西。

实现此目的的一种简单方法是在列表类中保留一个列表(如果没有列表,则必须创建一个列表)

答案 1 :(得分:0)

您可以通过包含EntitiesByKey和CollectionsByKey属性的IPersistenceContext访问实体:

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