使用AutoMapper映射子集合



我正在使用Automapper制作对象的副本

我的域可以简化为以下示例

假设我有一个Store,其中包含Location 的集合

public class Store
{
    public string Name { get; set;}
    public Person Owner {get;set;}
    public IList<Location> Locations { get; set;}
}

以下是商店实例的示例

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" }
                            }
            };

我的映射配置为

var configuration = new ConfigurationStore(
                       new TypeMapFactory(), MapperRegistry.AllMappers());
configuration.CreateMap<Store,Store>();
configuration.CreateMap<Person,Person>();
configuration.CreateMap<Location,Location>();

我得到映射实例作为

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

我从映射中得到的目标对象有一个Locations集合,其中源中存在相同的两个实例,即

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

我的问题是

如何配置Automapper以在映射时创建位置的新实例。

创建映射时,可以使用一个方法,该方法几乎可以做任何事情。例如:

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
}

使用此方法,您可以在StoreDTO中向它传递一个Id,它可以实例化一个位置:)

相关内容

  • 没有找到相关文章

最新更新