gpt4 book ai didi

mapping - 使用 AutoMapper 展开 DTO

转载 作者:行者123 更新时间:2023-12-03 07:23:00 25 4
gpt4 key购买 nike

我一直在尝试使用 AutoMapper 来节省从 DTO 到域对象的一些时间,但是我在配置 map 以使其正常工作时遇到了麻烦,并且我开始怀疑 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展平对象很容易,但是取消展平它们并不容易......甚至是不可能的。谁能告诉我我是否在尝试做不可能的事,如果不是,我做错了什么?

请注意,我的实际对象有点复杂,因此我可能会遗漏错误的关键信息...如果我正在做的事情看起来正确,我可以提供更多信息或开始简化我的用于测试的对象。

最佳答案

这似乎也适合我:

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/3145062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com