簡體   English   中英

映射時設置父屬性?

[英]Set parent properties when mapping?

我有以下課程:

public class ParentDto
{
    public Guid Guid {get; set;}
    public IEnumerable<Child> Children {get; set;}

    public ParentDto() { Guid = Guid.NewGuid(); }
}

public class ChildDto
{
    public Guid Guid {get; set;}
    public Guid ParentGuid {get; set;}
    public IEnumerable<GrandChild> GrandChildren {get; set;}

    public ChildDto() { Guid = Guid.NewGuid(); }
}

public class GrandChildDto
{
    public Guid Guid {get; set;}
    public Guid ChildGuid {get; set;}

    public GrandChildDto() { Guid = Guid.NewGuid(); }
}

映射很簡單:

Mapper.Initialize(cfg =>
{
  cfg.CreateMap<ParentModel, ParentDto>().ReverseMap();
  cfg.CreateMap<ChildModel, ChildDto>().ReverseMap();
  cfg.CreateMap<GrandChildModel, GrandChildDto>().ReverseMap();
});

目前,我首先做映射,然后我做:

foreach (var child in parent.Children)
{
    child.ParentGuid = parent.Guid;

    foreach (var grandChild in child.GrandChildren)
    {
        grandChild.ChildGuid = child.Guid;
    }
}

這是因為Guid屬性只能在 DTO 類中找到。

是否可以在映射配置中設置 guid 並避免foreach塊?

AutoMapper 確實支持地圖操作前后的執行代碼。

你可以用這樣的代碼定義它們

cfg.CreateMap<Source, Target>()
   .AfterMap((src, dest) => { .. }); 

但是您可能只有在您的 DTO 依賴於祖先代時才能使用它 - 例如 ParentDto 包含 ChildDTO。 否則這些項目彼此獨立,使用 AutoMapper 可能比僅使用 foreaches 更復雜。

暫無
暫無

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

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