Automapper映射到现有对象堆栈溢出异常

时间:2014-04-03 10:04:41

标签: exception nhibernate automapper dto

我正在编写一个可以通过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不包含它)。

1 个答案:

答案 0 :(得分:0)

你需要使用MaxDepth - AutoMapper不知道你的兔子洞要走多远。

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

这对NHibernate很重要,它使用代理对象无限加载。另一个选择是忽略UserOwner成员,但这可能不是你的意图。