我有以下课程:
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
阻止?
答案 0 :(得分:1)
AutoMapper支持在地图操作之前和之后执行代码。
您可以使用此代码
来定义它们cfg.CreateMap<Source, Target>()
.AfterMap((src, dest) => { .. });
但是,只有当您的DTO取决于祖先一代时,您才可以使用它 - 例如ParentDto包含ChildDTO。 这些项目彼此独立,使用AutoMapper可能比使用foreach更复杂。