0

NHibernate 有没有办法“手动”合并不是休眠映射的属性?

我的问题是我有一个从数据库加载实体时设置的属性。将实体合并到另一个会话后,该属性的值是错误的,因为休眠只合并映射的属性。

也许有可能在某处重载 OnMerge(obj entityMergeFrom, object EntityMergeTo) 方法之类的东西?

4

1 回答 1

0

我在 NHibernate 中遇到过类似的问题,并且没有代码我假设启用了延迟加载。为了解决这个问题,我实现了一个躲避当前会话上下文的函数。我希望这个对你有用。这样做是获取当前会话并从上下文中删除实体。然后它创建一个新会话以通过 ID 获取对象,然后处理上下文。最后,我们将“新鲜”实体合并到当前上下文中。如果您想保留未保存的值,您可能需要添加额外的逻辑。

    public T GetNotFromCache(Guid id, ISession session)
    {
        if (!CurrentSessionContext.HasBind(NHibernate.SessionManager.GetFactory()))
        {
            // the session with unmapped data is passed here.
            CurrentSessionContext.Bind(NHibernate.SessionManager.OpenSession());
        }

        T item = (T)session.Get<T>(id);
        session.Evict(item);
        T entity = null;

        // create a new session to assign the entity and dispose of it within this context
        using (ISession newSession = NHibernate.SessionManager.OpenNewSession())
        {
            entity = (T)newSession.Get<T>(id);
        } 

        // Merge and bind to the preferred session then do a get within the context.
        session.Merge<T>(entity);
        CurrentSessionContext.Bind(NHibernate.SessionManager.OpenSession());
        entity = session.Get<T>(id);

        return entity;
    }
于 2013-11-26T18:17:22.200 回答