我正在尝试找到一种配置AutoMapper的方法,以使用其源父对象的引用在目标对象中设置属性。下面的代码显示了我想要实现的目标。我正在将数据移入Parent&来自数据对象的子实例。映射可以很好地创建具有正确数据的List集合,但我需要有一个ForEach来分配父实例引用。
public class ParentChildMapper
{
public void MapData(ParentData parentData)
{
Mapper.CreateMap<ParentData, Parent>();
Mapper.CreateMap<ChildData, Child>();
//Populates both the Parent & List of Child objects:
var parent = Mapper.Map<ParentData, Parent>(parentData);
//Is there a way of doing this in AutoMapper?
foreach (var child in parent.Children)
{
child.Parent = parent;
}
//do other stuff with parent
}
}
public class Parent
{
public virtual string FamilyName { get; set; }
public virtual IList<Child> Children { get; set; }
}
public class Child
{
public virtual string FirstName { get; set; }
public virtual Parent Parent { get; set; }
}
public class ParentData
{
public string FamilyName { get; set; }
public List<Child> Children { get; set; }
}
public class ChildData
{
public string FirstName { get; set; }
}
答案 0 :(得分:52)
使用AfterMap。像这样:
Mapper.CreateMap<ParentData, Parent>()
.AfterMap((s,d) => {
foreach(var c in d.Children)
c.Parent = d;
});
答案 1 :(得分:0)
冗长一些
CreateMap<Source, Dest>()
.AfterMap((_, dest) => dest.Children.ForEach(x => x.Parent = dest))
在之后对源和/或目标类型执行自定义功能 成员映射
出于完整性考虑,这种事情实际上不应该是automapper的问题,因为它会导致过度抽象的副作用。