NHibernate Session.Merge()未映射属性
NHibernate中是否有“手动”合并非hibernate映射属性的方法 我的问题是,在从数据库加载实体时设置了一个属性。将实体合并到另一个会话后,该属性的值是错误的,因为hibernate只合并映射的属性NHibernate Session.Merge()未映射属性,nhibernate,Nhibernate,NHibernate中是否有“手动”合并非hibernate映射属性的方法 我的问题是,在从数据库加载实体时设置了一个属性。将实体合并到另一个会话后,该属性的值是错误的,因为hibernate只合并映射的属性 也许有可能在某个地方重载OnMerge(obj entityMergeFrom,object EntityMergeTo)方法之类的东西?我在NHibernate中遇到过类似的问题,如果没有代码,假设启用了延迟加载。为了解决这个问题,我实现了一个函数来避开当前会话上下文。我希望这会有所帮助
也许有可能在某个地方重载OnMerge(obj entityMergeFrom,object EntityMergeTo)方法之类的东西?我在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;
}
公共T GetNotFromCache(Guid id,ISession会话)
{
如果(!CurrentSessionContext.HasBind(NHibernate.SessionManager.GetFactory())
{
//在此传递具有未映射数据的会话。
CurrentSessionContext.Bind(NHibernate.SessionManager.OpenSession());
}
T item=(T)session.Get(id);
会议.驱逐(项目1);
T实体=null;
//创建新会话以分配实体并在此上下文中处置它
使用(ISession newSession=NHibernate.SessionManager.OpenNewSession())
{
实体=(T)newSession.Get(id);
}
//合并并绑定到首选会话,然后在上下文中执行get。
合并(实体);
CurrentSessionContext.Bind(NHibernate.SessionManager.OpenSession());
实体=session.Get(id);
返回实体;
}