Mapping Child Collections using AutoMapper

自古美人都是妖i 提交于 2019-12-06 13:50:13

问题


I am using Automapper for making a copy of an object

My domain can be reduced into this following example

Consider I have a Store with a collection of Location

public class Store
{
    public string Name { get; set;}

    public Person Owner {get;set;}

    public IList<Location> Locations { get; set;}
}

Below is an example of a store instance

var source = new Store 
            {           
                Name = "Worst Buy",
                Owner = new Person { Name= "someone", OtherDetails= "someone" },
                Locations = new List<Location>
                            {
                                new Location { Id = 1, Address ="abc" },
                                new Location { Id = 2, Address ="abc" }
                            }
            };

My Mappings are configured as

var configuration = new ConfigurationStore(
                       new TypeMapFactory(), MapperRegistry.AllMappers());

configuration.CreateMap<Store,Store>();
configuration.CreateMap<Person,Person>();
configuration.CreateMap<Location,Location>();

I get the mapped instance as

var destination = new MappingEngine(configuration).Map<Store,Store>(source);

The destination object I get from mapping has a Locations collection with the same two instances present in the source, that is

Object.ReferenceEquals(source.Locations[0], destination.Locations[0]) returns TRUE

My question is

How can I configure Automapper to create new instances of Location while mapping.


回答1:


When creating the maps you can use a method and that method can do pretty much anything. For example:

public void MapStuff()
{
    Mapper.CreateMap<StoreDTO, Store>()
        .ForMember(dest => dest.Location, opt => opt.MapFrom(source => DoMyCleverMagic(source)));
}

private ReturnType DoMyCleverMagic(Location source)
{
    //Now you can do what the hell you like. 
    //Make sure to return whatever type is set in the destination
}

Using this method you could pass it an Id in the StoreDTO and it can instantiate a location :)



来源:https://stackoverflow.com/questions/20253074/mapping-child-collections-using-automapper

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!