我正在编写一个可以通过Nhibernate更新数据库中某些数据的restService。 该服务从客户端接收DTO对象。
我正在使用Automapper将我的Dto映射到NhibernateObject。
问题是我的DTO类引用本身。这里有一个例子:
public class UserDto
{
public String Name{get;set;}
public string Lastname{get;set;}
public UserDto UserOwner{get;set;}
}
这是我的BusinessClass
public class User
{
public String Name{get;set;}
public string Lastname{get;set;}
public String Adress{get;set;}
public User UserOwner{get;set;}
}
有时User对象和UserOwner属性引用同一个对象。
所以当我这样做时
User usr = Automapper.Mapper.Map<UserDto,User>(myUserDtoObject); // this works fine
但是当我做的时候
Automapper.Mapper.Map(myUserdtoObject,MyUserNhibernateObject); // i've got a stackoverflowexception
我可以使用第一个选项,但如果我这样做,当创建Map函数返回的新UserEntity时,未设置“Adress”属性的值(UserDto不包含它)。
答案 0 :(得分:0)
你需要使用MaxDepth - AutoMapper不知道你的兔子洞要走多远。
ForMember(dest => dest.UserOwner, opt => opt.MaxDepth(1))
这对NHibernate很重要,它使用代理对象无限加载。另一个选择是忽略UserOwner成员,但这可能不是你的意图。