我一直在尝试使用 AutoMapper 来节省从 DTO 到域对象的时间,但是我在配置地图以使其正常工作时遇到了麻烦,并且我开始怀疑 AutoMapper 是否可能是错误的工具工作。
考虑这个域对象的示例(一个实体和一个值):
public class Person
{
public string Name { get; set; }
public StreetAddress Address { get; set; }
}
public class StreetAddress
{
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
}
我的 DTO(来自 Linq-to-SQL 对象)看起来大致如下:
public class PersonDTO
{
public string Name { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
}
我希望能够在我的存储库中执行此操作:
return Mapper.Map<PersonDTO, Person>(result);
我尝试过以我能想到的各种方式配置 AutoMapper,但我不断得到通用的缺少类型映射配置或映射不受支持错误,没有详细信息告诉我哪里失败了。
我尝试了多种不同的配置,但这里有一些:
Mapper.CreateMap<PersonDTO, Person>()
.ForMember(dest => dest.Address, opt => opt.MapFrom(Mapper.Map<Person, Domain.StreetAddress>));
and
Mapper.CreateMap<Person, Domain.Person>()
.ForMember(dest => dest.Address.Address1, opt => opt.MapFrom(src => src.Address))
.ForMember(dest => dest.Address.City, opt => opt.MapFrom(src => src.City))
.ForMember(dest => dest.Address.State, opt => opt.MapFrom(src => src.State));
我读过扁平化使用 AutoMapper 对象很容易,但是不平整它们并不容易……甚至不可能。谁能告诉我我是否在尝试做不可能的事,如果不是,我做错了什么?
请注意,我的实际对象有点复杂,因此我可能会遗漏错误的关键信息...如果我正在做的事情看起来正确,我可以提供更多信息或开始简化我的对象以进行测试。