以下の例に示すように、ドメインオブジェクトをDTOにフラット化しています。
public class Root
{
public string AParentProperty { get; set; }
public Nested TheNestedClass { get; set; }
}
public class Nested
{
public string ANestedProperty { get; set; }
}
public class Flattened
{
public string AParentProperty { get; set; }
public string ANestedProperty { get; set; }
}
// I put the equivalent of the following in a profile, configured at application start
// as suggested by others:
Mapper.CreateMap<Root, Flattened>()
.ForMember
(
dest => dest.ANestedProperty
, opt => opt.MapFrom(src => src.TheNestedClass.ANestedProperty)
);
// This is in my controller:
Flattened myFlattened = Mapper.Map<Root, Flattened>(myRoot);
私はいくつかの例を見てきましたが、これまでのところ、これはネストされた階層をフラット化する方法のようです。ただし、子オブジェクトに多数のプロパティがある場合、このアプローチではコーディングをあまり節約できません。
私はこの例を見つけました:
ただし、Map()関数で必要な、マップされたオブジェクトのインスタンスが必要です。これは、私が理解しているように、プロファイルでは機能しません。
私はAutoMapperを初めて使用するので、これを行うためのより良い方法があるかどうかを知りたいと思います。