具有EF导航属性的自动映射器

时间:2016-06-16 14:28:36

标签: c# entity-framework automapper

我尝试使用EF的导航属性来映射两个集合。

Collection.ItemsList<Item>

CollectionDTO具有一个名为CollectionItem的交叉连接表的导航属性,该表具有另一个导航属性Item

我希望每个CollectionDTO.CollectionItem.Item映射到Collection.Item

我试过了,但我无法弄明白。

有人可以帮忙吗?

var mapperConfig = new MapperConfiguration(cfg =>
{
    // CreateMap<source, destination>()    
    cfg.CreateMap<Collection, CollectionDTO>()
        .ForMember(dest => dest.Items,
                   opts => opts.MapFrom(src =>
                       src.CollectionItems.Where(x => x.CollectionId == src.Id).ToList().ForEach(ci => ci.Item)));

});

1 个答案:

答案 0 :(得分:0)

您可以使用Select扩展方法,如下所示:

// CreateMap<source, destination>()    
    cfg.CreateMap<Collection, CollectionDTO>()
       .ForMember(dest => dest.Items,
                   opts => opts.MapFrom(src =>
                       src.CollectionItems.Select(ci=>ci.Item).ToList()));

如果Item导航属性是一个集合,则使用SelectMany扩展方法:

// CreateMap<source, destination>()    
    cfg.CreateMap<Collection, CollectionDTO>()
       .ForMember(dest => dest.Items,
                   opts => opts.MapFrom(src =>
                       src.CollectionItems.SelectMany(ci=>ci.Item).ToList()));