[英]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.Items
到CollectionDTO.CollectionItems
AutoMapper知道足以映射Collection.CollectionItems
在正確收集CollectionDTO
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.