Exception 自动映射到现有对象堆栈溢出异常

Exception 自动映射到现有对象堆栈溢出异常,exception,nhibernate,automapper,dto,Exception,Nhibernate,Automapper,Dto,我正在编写一个restService,它可以通过Nhibernate更新数据库中的一些数据。 该服务从客户端接收DTO对象 我正在使用Automapper将我的Dto映射到NhibernateObject 问题在于我的DTO类引用本身。这里有一个例子: 公共类UserDto { 公共字符串名称{get;set;} 公共字符串Lastname{get;set;} public UserDto UserOwner{get;set;} } 这是我的商务舱 公共类用户 { 公共字符串名称{get;se

我正在编写一个restService,它可以通过Nhibernate更新数据库中的一些数据。 该服务从客户端接收DTO对象

我正在使用Automapper将我的Dto映射到NhibernateObject

问题在于我的DTO类引用本身。这里有一个例子:

公共类UserDto
{
公共字符串名称{get;set;}
公共字符串Lastname{get;set;}
public UserDto UserOwner{get;set;}
}
这是我的商务舱

公共类用户
{
公共字符串名称{get;set;}
公共字符串Lastname{get;set;}
公共字符串地址{get;set;}
公共用户UserOwner{get;set;}
}
有时用户对象和用户所有者属性引用同一个对象

所以当我这么做的时候

User usr=Automapper.Mapper.Map(myUserDtoObject);//这个很好用
但当我这么做的时候

Automapper.Mapper.Map(myUserdtoObject,MyUserNhibernateObject);//我有一个stackoverflowexception

我可以使用第一个选项,但如果我这样做,当创建映射函数返回的新UserEntity时,不会设置“Address”属性的值(UserDto不包含它)。

您需要使用MaxDepth-AutoMapper不知道要下到兔子洞多远

ForMember(dest => dest.UserOwner, opt => opt.MaxDepth(1))

这对于NHibernate很重要,它使用代理对象无限期加载。另一个选项是忽略UserOwner成员,但这可能不是您的目的。

您可以尝试在映射定义中使用
ignore
,然后手动分配
UserOwner
。我尝试了此操作,但在映射之后,我的UserOwner属性的值设置为null。