NHibernate中有没有办法手动"合并不是hibernate映射的属性?
我的问题是我有一个从数据库加载实体时设置的属性。在将实体合并到另一个会话之后,该属性的值是错误的,因为hibernate仅合并映射的属性。
也许有可能在某处重载像OnMerge(obj entityMergeFrom,object EntityMergeTo)这样的方法吗?
答案 0 :(得分: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;
}