我是否需要以两种方式创建automapper createmap?

Blu*_*ppy 39 model viewmodel automapper asp.net-mvc-3

这可能是一个愚蠢的问题!(n00b到AutoMapper和时间短!)

我想使用AutoMapper从EF4实体映射到ViewModel类.

1)如果我打电话

CreateMap<ModelClass, ViewModelClass>()
Run Code Online (Sandbox Code Playgroud)

然后我也需要打电话

CreateMap<ViewModelClass, ModelClass>()
Run Code Online (Sandbox Code Playgroud)

执行相反的操作?

2)如果两个类具有相同的属性名称,那么我是否需要一个CreateMap语句,或者这只是针对"特定/自定义"映射?

Iva*_*tev 110

关于偶然发现这个问题的人的信息.现在似乎有一种通过.ReverseMap()CreateMap()配置链末尾添加调用来实现反向映射的内置方法.

  • 显然它包含在[第一个答案后几个月](https://github.com/AutoMapper/AutoMapper/commit/bff6e2aa49af3e7b50f527376da48924efa7d81e) (4认同)

Dar*_*rov 15

在AutoMapper中,您有源类型和目标类型.因此,只有拥有相应的CreateMap时,才能在此Source类型和Destination类型之间进行映射.那么回答你的问题:

  1. 无需定义反向映射.只有在打算回映时才需要这样做.
  2. 是的,您需要调用CreateMap来指示这些类型是可映射的,否则当您调用Map<TSource, TDest>告诉您源和目标类型之间不存在映射时将抛出异常.


Bri*_*ian 8

我用扩展方法做两种方式的映射

    public static IMappingExpression<TDestination, TSource> BothWays<TSource, TDestination>
        (this IMappingExpression<TSource, TDestination> mappingExpression)
    {
        return Mapper.CreateMap<TDestination, TSource>();
    }
Run Code Online (Sandbox Code Playgroud)

用法:

 CreateMap<Source, Dest>().BothWays();
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个扩展已经存在为`.ReverseMap()`即`CreateMap <In,Out>().ReverseMap()`见[here](http://stackoverflow.com/a/18490071/1037948).. .我刚刚注意到[下面的答案](http://stackoverflow.com/a/11673804/1037948) (3认同)