Do i need to create automapper createmap both ways?

后端 未结 4 1403
情深已故
情深已故 2021-02-05 00:08

This might be a stupid question! (n00b to AutoMapper and time-short!)

I want to use AutoMapper to map from EF4 entities to ViewModel classes.

1) If I call

<
相关标签:
4条回答
  • 2021-02-05 00:38

    I've used an extension method do mapping both ways

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

    usage:

     CreateMap<Source, Dest>().BothWays();
    
    0 讨论(0)
  • 2021-02-05 00:39

    For the info of the people who stumble upon this question. There appears to be now a built-in way to achieve a reverse mapping by adding a .ReverseMap() call at the end of your CreateMap() configuration chain.

    0 讨论(0)
  • 2021-02-05 00:44

    In AutoMapper you have a Source type and a Destination type. So you will be able to map between this Source type and Destination type only if you have a corresponding CreateMap. So to answer your questions:

    1. You don't need to define the reverse mapping. You have to do it only if you intend to map back.
    2. Yes, you need to call CreateMap to indicate that those types are mappable otherwise an exception will be thrown when you call Map<TSource, TDest> telling you that a mapping doesn't exist between the source and destination type.
    0 讨论(0)
  • 2021-02-05 00:48
    1. Yes, or you can call CreateMap<ModelClass, ViewModelClass>().ReverseMap().
    2. If two classes have same Member(Property,Field,GetMethod()), you needn't call CreateMap<TSrc,TDest>. Actually, if every member in TDest are all exist in TSrc, you needn't call CreateMap<TSrc,TDest>. The following code works.
    class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }  
    }
    class Person2
    {
       public string Name { get; set; }
       public int? Age { get; set; }
       public DateTime BirthTime { get; set; }
    }
    public class NormalProfile : Profile
    {
        public NormalProfile()
        {
           //CreateMap<Person2, Person>();//
        }
    }
       
    var cfg = new MapperConfiguration(c => 
    { 
        c.AddProfile<NormalProfile>();
    });
    //cfg.AssertConfigurationIsValid();
    var mapper = cfg.CreateMapper();
    var s3 = mapper.Map<Person>(new Person2 { Name = "Person2" });
    
    0 讨论(0)
提交回复
热议问题