Asp.net mvc 3 我是否需要双向创建automapper createmap?

Asp.net mvc 3 我是否需要双向创建automapper createmap?,asp.net-mvc-3,model,viewmodel,automapper,Asp.net Mvc 3,Model,Viewmodel,Automapper,这可能是个愚蠢的问题!(n00b到AutoMapper,时间很短!) 我想使用AutoMapper将EF4实体映射到ViewModel类 1) 如果我打电话 CreateMap<ModelClass, ViewModelClass>() CreateMap() 那我也需要打电话吗 CreateMap<ViewModelClass, ModelClass>() CreateMap() 执行相反的操作 2) 如果两个类具有相同的属性名,那么我是否需要CreateMap

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

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

1) 如果我打电话

CreateMap<ModelClass, ViewModelClass>()
CreateMap()
那我也需要打电话吗

CreateMap<ViewModelClass, ModelClass>()
CreateMap()
执行相反的操作


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

在AutoMaper中,您有一个源类型和一个目标类型。因此,只有当您有相应的CreateMap时,才能在源类型和目标类型之间进行映射。因此,要回答您的问题:

  • 您不需要定义反向映射。只有当你打算映射回地图时,你才必须这样做
  • 是的,您需要调用CreateMap来指示这些类型是可映射的,否则当您调用
    Map
    告诉您源类型和目标类型之间不存在映射时,将引发异常

  • 我使用了一种扩展方法来实现双向映射

        public static IMappingExpression<TDestination, TSource> BothWays<TSource, TDestination>
            (this IMappingExpression<TSource, TDestination> mappingExpression)
        {
            return Mapper.CreateMap<TDestination, TSource>();
        }
    
    publicstaticimappingexpression双向
    (此IMappingExpression映射表达式)
    {
    返回Mapper.CreateMap();
    }
    
    用法:

     CreateMap<Source, Dest>().BothWays();
    
    CreateMap().BothWays();
    
    了解偶然发现这个问题的人的信息。现在似乎有一种内置方法可以通过在
    CreateMap()
    配置链的末尾添加
    .ReverseMap()
    调用来实现反向映射

  • 是的,或者您可以调用
    CreateMap().ReverseMap()
  • 如果两个类具有相同的
    成员
    (属性、字段、GetMethod()),则无需调用
    CreateMap
    。实际上,如果
    TDest
    中的每个
    成员都存在于
    TSrc
    中,则不需要调用
    CreateMap
    。下面的代码可以工作
  • 班级人员
    {
    公共字符串名称{get;set;}
    公共整数{get;set;}
    }
    班级人员2
    {
    公共字符串名称{get;set;}
    公共整数{get;set;}
    公共日期时间出生时间{get;set;}
    }
    公共类NormalProfile:Profile
    {
    公共档案()
    {
    //CreateMap()//
    }
    }
    var cfg=新的MapperConfiguration(c=>
    { 
    c、 AddProfile();
    });
    //cfg.AssertConfigurationsValid();
    var mapper=cfg.CreateMapper();
    var s3=mapper.Map(newperson2{Name=“Person2”});
    
    我知道这里不是提问的地方。通常,我使用AutoMapper来启动带有DTO的实体对象,DTO是我在客户端应用程序中使用的唯一模型。我的问题是关于从数据库中读取数据,在这段时间里,我有一个实体模型集合,它应该启动DTO模型。我需要创建另一个反向映射吗?@saber是。我的意思是,除非有人证明相反,否则我就是这么做的。问题仍然存在,为什么我们必须调用
    CreateMap
    ?强迫我手动指定映射对于整个“自动”部分来说是不真实的…我认为这个扩展已经存在,如所见,
    .ReverseMap()
    即,
    CreateMap().ReverseMap()
    。正如我刚才在上所注意到的,我认为ReverseMap是在2012年2月之后添加的。也许,我刚过2011年11月,很明显它被包含了
    。ReverseMap()
    不适用于
    。FormMember(dest=>dest.prop,opt=>optMapFrom(src=>src.prop))
    使用
    CreateMap()。ReverseMap()
    和所有链式修剪将为您节省一些按键次数--请参阅