[英]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.