mapping - 使用 AutoMapper 展开 DTO

标签 mapping automapper

我一直在尝试使用 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>));

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 展平对象很容易,但是展开它们并不容易......甚至不可能。谁能告诉我我是否在尝试做不可能的事情,如果不是,我做错了什么?

请注意,我的实际对象有点复杂,所以我可能遗漏了导致错误的关键信息...如果我所做的看起来正确,我可以提供更多信息或开始简化我的测试对象。<​​/p>

最佳答案

这似乎也适用于我:

Mapper.CreateMap<PersonDto, Address>();
Mapper.CreateMap<PersonDto, Person>()
        .ForMember(dest => dest.Address, opt => opt.MapFrom( src => src )));

基本上,创建从 dto 到两个对象的映射,然后将其用作子对象的源。

关于mapping - 使用 AutoMapper 展开 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8159186/

相关文章:

c# - 如何使用 Automapper 将集合映射到集合容器?

c# - 多个自动映射器命名约定

javascript - 在 JavaScript 中将一系列值(例如 [0,255])映射到一系列颜色(例如彩虹 : [red, 蓝色])

memory - 带有 STL 向量的 shm_open 和 mmap

grails - Grails如何与SQL Server数据库正确地一对多映射

dependency-injection - 使用 ITypeConverter 进行 AutoMapper 依赖注入(inject)

c# - 更高效的自定义 map 配置

java - 在 Java 中 - 如何将 resultSet 映射到复杂对象?

java - 将正整数范围映射到索引范围

linq - 使用连接表的 Automapper 和 Linq,填充 ViewModel 属性