建立一个实体类和该类的DTO(数据传输对象),然后在实体类中添加一个ICollection的属性,用于将DTO转换为实体类。
以下为代码示例:
public class ParentEntity
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection ChildEntities { get; set; }
}
public class ChildEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ParentDto
{
public int Id { get; set; }
public string Name { get; set; }
public List ChildEntities { get; set; }
}
public class ChildDto
{
public int Id { get; set; }
public string Name { get; set; }
}
然后,使用Automapper在DTO和实体类之间进行映射:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap()
.ForMember(dest => dest.ChildEntities, opt => opt.MapFrom(src => src.ChildEntities));
cfg.CreateMap();
});
var mapper = config.CreateMapper();
var parent = new ParentEntity()
{
Name = "Parent",
ChildEntities = new List() {
new ChildEntity() {Name = "Child1"},
new ChildEntity() {Name = "Child2"}
}
};
var dto = mapper.Map(parent);
通过将ICollection属性添加到实体类中,可以解决Automapper在映射子集合时的问题。