Nhibernate:获取真实实体类而不是代理类

Nhibernate:获取真实实体类而不是代理类,nhibernate,Nhibernate,有没有办法让nhibernate返回我的类而不是它的代理类?我不介意它是否懒惰或无法更新。我正在使用它在实体框架中实现类似的功能 var nonProxiedInstance = Mapper.DynamicMap<YourType>(proxiedInstance); var nonProxiedInstance=Mapper.DynamicMap(proxiedInstance); 如果您没有导航属性,这将起作用。否则,您需要配置映射以忽略这些属性 注意:这(显然)是一个低效

有没有办法让nhibernate返回我的类而不是它的代理类?我不介意它是否懒惰或无法更新。

我正在使用它在实体框架中实现类似的功能

var nonProxiedInstance = Mapper.DynamicMap<YourType>(proxiedInstance);
var nonProxiedInstance=Mapper.DynamicMap(proxiedInstance);
如果您没有导航属性,这将起作用。否则,您需要配置映射以忽略这些属性


注意:这(显然)是一个低效的解决方案。

您可以使用此代码取消类的固定

session.PersistenceContext.Unproxy(proxiedInstance)

您应该在映射中通过定义lazy=“false”来定义它



您可以使用中描述的技术(您需要递归地执行)

您可以使用以下代码获得真实对象

InstanceType instance;
if (proxiedInstance is INHibernateProxy)
{
 var lazyInitialiser = ((INHibernateProxy)proxiedInstance).HibernateLazyInitializer;
 instance = (InstanceType)lazyInitialiser.GetImplementation();
}

session.PersistenceContext.Unproxy(proxiedInstance)
将不会取消关联。另外,
no proxy
延迟加载也做了同样的事情。 禁用延迟加载不是一个好主意,AutoMapper将导航所有属性并触发加载机制


从可以用于解除对象及其关系的固定。此方法不会错误地初始化任何代理对象。

这不起作用。代理不包含继承的(实)类的属性,因此映射类型中也会缺少该属性。是否有方法取消所有关联的固定?它取消了我的主要对象,但它与其他对象的关系保持代理。具体地说,什么是“上述任何一项”?当人们提交新答案时,这种评论不起作用。您应该指定哪些技术不起作用以及原因。
InstanceType instance;
if (proxiedInstance is INHibernateProxy)
{
 var lazyInitialiser = ((INHibernateProxy)proxiedInstance).HibernateLazyInitializer;
 instance = (InstanceType)lazyInitialiser.GetImplementation();
}