C# 自动映射和嵌套对象
假设我有以下课程C# 自动映射和嵌套对象,c#,automapper,C#,Automapper,假设我有以下课程 public class Parent { public int ParentId { get; set; } public List<Child> Children{get; set; } // other properties } public class Child { public int ChildId { get; set; } // other properties } public class Paren
public class Parent {
public int ParentId { get; set; }
public List<Child> Children{get; set; }
// other properties
}
public class Child {
public int ChildId { get; set; }
// other properties
}
public class ParentVm {
public int ParentId { get; set; }
public List<ChildVm> Children{get; set; }
// other properties
}
public class ChildVm {
public int ParentId { get; set; }
public int ChildId { get; set; }
// other properties
}
Parent parent = /*something*/
var parentVm = Mapper.Map<ParentVm>(parent);
公共类父类{
public int ParentId{get;set;}
公共列表子项{get;set;}
//其他属性
}
公营儿童{
public int ChildId{get;set;}
//其他属性
}
公共类ParentVm{
public int ParentId{get;set;}
公共列表子项{get;set;}
//其他属性
}
公共类ChildVm{
public int ParentId{get;set;}
public int ChildId{get;set;}
//其他属性
}
Parent=/*某物*/
var parentVm=Mapper.Map(父级);
在
ChildVm
中,有属性ParentId
。我如何将该值传播到使用automapper中?我对您的问题做了一些假设
Parent
映射到ParentVm
(以及Child
映射到ChildVm
)Parent
ParentId
映射到ChildVm
ParentId
CreateMap
中使用了AfterMap
void Main()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Parent, ParentVm>().AfterMap((s, d) =>
{
foreach (var child in d.Children)
{
child.ParentId = d.ParentId;
}
});
cfg.CreateMap<Child, ChildVm>();
});
var mapper = config.CreateMapper();
var parent = new Parent { ParentId = 1, Children = new List<Child>() };
var child1 = new Child { ChildId = 1 };
var child2 = new Child { ChildId = 2 };
parent.Children.Add(child1);
parent.Children.Add(child2);
var parentVm = mapper.Map<Parent, ParentVm>(parent);
parentVm.Dump();
}
public class Parent
{
public int ParentId { get; set; }
public List<Child> Children { get; set; }
// other properties
}
public class Child
{
public int ChildId { get; set; }
// other properties
}
public class ParentVm
{
public int ParentId { get; set; }
public List<ChildVm> Children { get; set; }
// other properties
}
public class ChildVm
{
public int ParentId { get; set; }
public int ChildId { get; set; }
// other properties
}
void Main()
{
var config=new-MapperConfiguration(cfg=>
{
cfg.CreateMap().AfterMap((s,d)=>
{
foreach(d.Children中的var child)
{
child.ParentId=d.ParentId;
}
});
CreateMap();
});
var mapper=config.CreateMapper();
var parent=new parent{ParentId=1,Children=new List()};
var child1=新子{ChildId=1};
var child2=新子{ChildId=2};
parent.Children.Add(child1);
parent.Children.Add(child2);
var parentVm=mapper.Map(父级);
parentVm.Dump();
}
公共类父类
{
public int ParentId{get;set;}
公共列表子项{get;set;}
//其他属性
}
公营儿童
{
public int ChildId{get;set;}
//其他属性
}
公共类ParentVm
{
public int ParentId{get;set;}
公共列表子项{get;set;}
//其他属性
}
公共类ChildVm
{
public int ParentId{get;set;}
public int ChildId{get;set;}
//其他属性
}
输出:
我对你的问题做了一些假设
Parent
映射到ParentVm
(以及Child
映射到ChildVm
)Parent
ParentId
映射到ChildVm
ParentId
CreateMap
中使用了AfterMap
void Main()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Parent, ParentVm>().AfterMap((s, d) =>
{
foreach (var child in d.Children)
{
child.ParentId = d.ParentId;
}
});
cfg.CreateMap<Child, ChildVm>();
});
var mapper = config.CreateMapper();
var parent = new Parent { ParentId = 1, Children = new List<Child>() };
var child1 = new Child { ChildId = 1 };
var child2 = new Child { ChildId = 2 };
parent.Children.Add(child1);
parent.Children.Add(child2);
var parentVm = mapper.Map<Parent, ParentVm>(parent);
parentVm.Dump();
}
public class Parent
{
public int ParentId { get; set; }
public List<Child> Children { get; set; }
// other properties
}
public class Child
{
public int ChildId { get; set; }
// other properties
}
public class ParentVm
{
public int ParentId { get; set; }
public List<ChildVm> Children { get; set; }
// other properties
}
public class ChildVm
{
public int ParentId { get; set; }
public int ChildId { get; set; }
// other properties
}
void Main()
{
var config=new-MapperConfiguration(cfg=>
{
cfg.CreateMap().AfterMap((s,d)=>
{
foreach(d.Children中的var child)
{
child.ParentId=d.ParentId;
}
});
CreateMap();
});
var mapper=config.CreateMapper();
var parent=new parent{ParentId=1,Children=new List()};
var child1=新子{ChildId=1};
var child2=新子{ChildId=2};
parent.Children.Add(child1);
parent.Children.Add(child2);
var parentVm=mapper.Map(父级);
parentVm.Dump();
}
公共类父类
{
public int ParentId{get;set;}
公共列表子项{get;set;}
//其他属性
}
公营儿童
{
public int ChildId{get;set;}
//其他属性
}
公共类ParentVm
{
public int ParentId{get;set;}
公共列表子项{get;set;}
//其他属性
}
公共类ChildVm
{
public int ParentId{get;set;}
public int ChildId{get;set;}
//其他属性
}
输出:
您的问题并没有显示您试图将
ChildVm
ParentId
映射到任何内容。另外,如果您试图创建ParentVm
,则您的Mapper.Map
命令似乎是向后的,因为该行将创建一个Parent
对象。实际用例是否正在尝试将具有子对象的父对象映射到具有子对象的父对象映射到具有子对象的父对象映射到具有子对象的父对象映射?要将Parent
ParentId
属性传播到ChildVm
ParentId
属性,您的问题表明您没有试图将ChildVm
ParentId
映射到任何对象。另外,如果您试图创建ParentVm
,则您的Mapper.Map
命令似乎是向后的,因为该行将创建一个Parent
对象。实际用例是否正在尝试将具有子对象的父对象映射到具有子对象的父对象映射到具有子对象的父对象映射到具有子对象的父对象映射?并且要将父项父项ID
属性传播到子项VM
父项ID
属性?