给定课程:
public class Person
{
public string Name { get; set; }
}
public class Student : Person
{
public int StudentId { get; set; }
}
public class Source
{
public Person Person { get; set; }
}
public class Dest
{
public string PersonName { get; set; }
public int? PersonStudentId { get; set; }
}
我想使用 Automapper 来映射 Source -> Dest。
这个测试显然失败了:
Mapper.CreateMap<Source, Dest>();
var source = new Source() { Person = new Student(){ Name = "J", StudentId = 5 }};
var dest = Mapper.Map<Source, Dest>(source);
Assert.AreEqual(5, dest.PersonStudentId);
考虑到“Person”实际上是整个域模型中大量使用的数据类型,最好的映射方法是什么。
编辑:目的是保留“Dest”对象,这些对象将为“Person”子类型的所有属性定义字段。因此,我们可以有如下的源对象,并且不希望必须为“Person”子类的每个可能组合创建 Dest 对象:
public class Source2
{
public Person Value1 { get; set; }
public Person Value2 { get; set; }
public Person Value3 { get; set; }
public Person Value4 { get; set; }
public Person Value5 { get; set; }
}