【问题标题】:NHibernate equivilent of Entity Framework's DbSet.Local for unflushed entities?NHibernate 等效于实体框架 DbSet.Local 用于未刷新的实体?
【发布时间】:2011-06-30 15:36:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: nhibernate entity-framework


    【解决方案1】:

    NHibernate 不公开任何类似 EF 的 DbSet.Local。

    实现这一点的一种简单方法是在存储库类中保留一个列表(如果没有,则必须创建它)

    【讨论】:

      【解决方案2】:

      您可以通过IPersistenceContext 获取实体,其中包含属性EntitiesByKey 和CollectionsByKey:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-11
        • 1970-01-01
        • 2012-01-22
        • 1970-01-01
        • 1970-01-01
        • 2016-08-20
        • 2017-12-22
        相关资源
        最近更新 更多