我试图在会话中获取具有惰性属性的对象,并尝试在另一个会话中更新它。但它没有这样做,并出现错误:SecUserProxy 没有持久性(实际类是 SecUser)
我正在使用 NHibernate 3.4。当我用谷歌搜索时,我知道它是一个已修复的错误。
我还看到了这篇文章,其中说如果您的代理对象实现了 INhibernateProxy,您可以使用 NHibernate 取消代理该对象。由于 NHibernate 不再支持可插入代理工厂(如 Castle、LinFu 等),它使用内部代理工厂,我假设内部代理工厂可能是 INhibernateProxy
所以我在新会话中执行了以下操作,我想将我的对象更新为:
object unprox_obj = Session
.GetSessionImplementation()
.PersistenceContext.Unproxy(secUserobj);
期望获得相同的对象,但具有真实类型,即 SecUser,以便它可以更新而不会出现任何错误。但它仍然返回一个代理对象。
我无法理解发生了什么?
更新: 我刚刚意识到'secUserobj'不是INhibernateProxy。那么我怎样才能让它 INhibernateProxy 以便在另一个会话中更新我的对象呢?
if (secUserobj is INHibernateProxy)
{
unprox_obj = Session
.GetSessionImplementation()
.PersistenceContext.Unproxy(secUserobj);
}