C# 使用Automapper为成员创建地图
我开始使用AutoMapper,有个问题。我遇到了如下示例代码:C# 使用Automapper为成员创建地图,c#,automapper,C#,Automapper,我开始使用AutoMapper,有个问题。我遇到了如下示例代码: Automapper.Mapper.CreateMap<Book, BookViewModel>() .ForMember(dest => dest.Author, opts => opts.MapFrom(src => src.Author.Name)); Automapper.Mapper.CreateMap() .ForMember(dest=>dest.
Automapper.Mapper.CreateMap<Book, BookViewModel>()
.ForMember(dest => dest.Author,
opts => opts.MapFrom(src => src.Author.Name));
Automapper.Mapper.CreateMap()
.ForMember(dest=>dest.Author,
opts=>opts.MapFrom(src=>src.Author.Name));
因此,这将允许我将一本书转换为一个书模型,然后将src映射到src.author.name属性,因为没有1-1映射
为了确认这一点,它本身并不是反向工作的,这意味着我现在需要明确地这样做:
Mapper.Mapper.CreateMap<BookViewModel, Book>()
.ForMember(dest => dest.Author.Name,
opts => opts.MapFrom(src => src.Author));
Mapper.Mapper.CreateMap()
.FormMember(dest=>dest.Author.Name,
opts=>opts.MapFrom(src=>src.Author));
对吗?因此,为了进一步确认,如果我有50个视图模型和视图,我实际上需要100个(一个用于输入,一个用于输出,再加上.ForMember表达式中的任何额外代码行)
这是真的吗?这是否是一种常见做法(即,您可能会看到数百行代码来处理属性与1-1不匹配的多个DTO的字段来回映射)?
CreateMap
创建映射,以便AutoMapper在以后需要时使用。这在应用程序的生命周期中只需要一次。为了使用您定义的映射,您只需要调用Automapper.Map
方法。因此,您不必一次又一次地创建映射
例如:
var myBookViewModel = Automapper.Map<Book, BookViewModel>(myBook);
var myBookViewModel=Automapper.Map(myBook);
您的说法是正确的,为Book to BookViewModel定义映射器不会使Automapper自动为BookViewModel创建映射器以进行Book to Book。您必须创建映射器。
CreateMap
创建一个映射,供AutoMaper在以后需要时使用。这在应用程序的生命周期中只需要一次。为了使用您定义的映射,您只需要调用Automapper.Map
方法。因此,您不必一次又一次地创建映射
例如:
var myBookViewModel = Automapper.Map<Book, BookViewModel>(myBook);
var myBookViewModel=Automapper.Map(myBook);
您的说法是正确的,为Book to BookViewModel定义映射器不会使Automapper自动为BookViewModel创建映射器以进行Book to Book。您必须创建映射器。本质上是的,您基本上需要指定来回配置来处理每个DTO映射。如果没有确定性模式,就不可能猜测当成员的名称不同时,或者当您想要的属性在其他对象中更深入时(如您的示例中),复杂对象之间的映射将如何工作
然而,如果您遵循一些基本模式,Automapper是相当聪明的。在您的情况下,如果将DTO属性名称更改为AuthorName
而不是Author
,则CreateMap
将正确映射,而无需手动指定映射(他们称之为“展平”)。汽车制造商会的。按照此模式重命名DTO属性可能会节省大量的行。查看它们的配置,寻找简化映射的其他方法。本质上是的,您基本上需要指定来回配置来处理每个DTO映射。如果没有确定性模式,就不可能猜测当成员的名称不同时,或者当您想要的属性在其他对象中更深入时(如您的示例中),复杂对象之间的映射将如何工作
然而,如果您遵循一些基本模式,Automapper是相当聪明的。在您的情况下,如果将DTO属性名称更改为
AuthorName
而不是Author
,则CreateMap
将正确映射,而无需手动指定映射(他们称之为“展平”)。汽车制造商会的。按照此模式重命名DTO属性可能会节省大量的行。查看一下它们,寻找其他简化映射的方法。是的,我只需要在加载文件时编写一次,但我只是说,事实上,我必须在启动时编写所有类似的代码。。好的,谢谢,我只需要在加载文件时做一次,但我只是说,事实上,我必须在启动时有所有类似的代码。。好的,谢谢