クラスを考えると:
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);
「人」が実際にドメインモデル全体で頻繁に使用されるデータ型であることを考えると、これをマッピングするための最良のアプローチは何でしょうか。
編集:意図は、「人」のサブタイプのすべてのプロパティに対して定義されたフィールドを持つ「Dest」オブジェクトを永続化することです。したがって、次のようなソース オブジェクトを持つことができ、"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; }
}