簡體   English   中英

具有嵌套目標屬性的自動映射器

[英]Automapper with nested destination Property

我試圖像這樣映射一個嵌套的子屬性。

var mapperConfig = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Collection, CollectionDTO>()
        .ForMember(dest => dest.Items.Select(x => x.AddedToCollectionDate),
                               opts => opts.MapFrom(src =>
                                   src.CollectionItems.Select(ci => ci.AddedToCollectionDate)));

});

Collection.Items是一個List<Item> 每個Item都有一個AddedToCollectionDate屬性,我需要從源映射中填充該屬性。

CollectionDTO具有一個名為CollectionItem的交叉AddedToCollectionDate表的導航屬性,該表具有一個名為AddedToCollectionDate的屬性。

錯誤:

類型的頂級單個成員僅支持成員的自定義配置。

如何使用AutoMapper做到這一點?

類別(為簡潔起見,省略了其他屬性):

public partial class Collection
{   
    public virtual ICollection<CollectionItem> CollectionItems { get; set; }
}

public partial class CollectionItem
{
    public System.DateTime AddedToCollectionDate { get; set; }

    public virtual Collection Collection { get; set; }
    public virtual Item Item { get; set; }
}

public class CollectionDTO
{
    public List<ItemDTO> Items { get; set; }    
    public DateTime LastAccessedDate { get; set; }  
}

public class Item
{
    public DateTime LastAccessedDate { get; set; }
    public virtual ICollection<CollectionItem> CollectionItems { get; set; }
}

我通過執行FirstOrDefault()而不是像這樣的Select()選擇來使其工作。

cfg.CreateMap<Item, ItemDTO>()
                    .ForMember(dest => dest.AddedToCollectionDate,
                               opts => opts.MapFrom(src =>
                                   src.CollectionItems.FirstOrDefault().AddedToCollectionDate));

除了應該調用ForMember ,還應該為CollectionItem配置一個映射。

cfg.CreateMap<CollectionItem, ItemDTO>();
cfg.CreateMap<Collection, CollectionDTO>();

如果你也重命名CollectionDTO.ItemsCollectionDTO.CollectionItems AutoMapper知道足以映射Collection.CollectionItems在正確收集CollectionDTO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM