I am using auto mapper to map multiple objects (db class into ui objects).
Map 1:
Mapper.CreateMap<sourceone, destination>().ForMember(sss => sss.one, m => m.MapFrom(source => source.abc));
Map 2:
Mapper.CreateMap<sourcetwo, destination>().ForMember(sss => sss.two, m => m.MapFrom(source => source.xyz)); destination d = new destination();
//Map 1
d = AutoMapper.Mapper.Map<sourceone, destination>(sourceone);
//Map 2
d = AutoMapper.Mapper.Map<sourcetwo, destination>(sourcetwo);
Once I make call to the 'Map 2', the values that are populated using Map 1 are lost.. (i.e destination.one is becoming empty). How do I fix this?
1. If you use the convention-based mapping and a property is later renamed that becomes a runtime error and a common source of annoying bugs. 2. If you don't use convention-based mapping (ie you explicitly map each property) then you are just using automapper to do your projection, which is unnecessary complexity.
Yes, or you can call CreateMap<ModelClass, ViewModelClass>(). ReverseMap() .
Inside this article, it discusses performance and it indicates that Automapper is 7 times slower than manual mapping. This test was done on 100,000 records and I must say I was shocked.
What is AutoMapper Reverse Mapping in C#? The Automapper Reverse Mapping is nothing but the two-way mapping which is also called as bidirectional mapping.
Map
has an overload that takes a source and destination object:
d = AutoMapper.Mapper.Map<sourceone, destination>(sourceone); /* Pass the created destination to the second map call: */ AutoMapper.Mapper.Map<sourcetwo, destination>(sourcetwo, d);
mapper.MergeInto<PersonCar>(person, car)
with the accepted answer as extension-methods, simple and general version:
public static TResult MergeInto<TResult>(this IMapper mapper, object item1, object item2) { return mapper.Map(item2, mapper.Map<TResult>(item1)); } public static TResult MergeInto<TResult>(this IMapper mapper, params object[] objects) { var res = mapper.Map<TResult>(objects.First()); return objects.Skip(1).Aggregate(res, (r, obj) => mapper.Map(obj, r)); }
after configuring mapping for each input-type:
IMapper mapper = new MapperConfiguration(cfg => { cfg.CreateMap<Person, PersonCar>(); cfg.CreateMap<Car, PersonCar>(); }).CreateMapper();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With