Automapper のドキュメントには、次のような継承の例があります。
public class Order { }
public class OnlineOrder : Order { }
public class MailOrder : Order { }
public class OrderDto { }
public class OnlineOrderDto : OrderDto { }
public class MailOrderDto : OrderDto { }
Mapper.CreateMap<Order, OrderDto>()
.Include<OnlineOrder, OnlineOrderDto>()
.Include<MailOrder, MailOrderDto>();
Mapper.CreateMap<OnlineOrder, OnlineOrderDto>();
Mapper.CreateMap<MailOrder, MailOrderDto>();
同様のことをしたいのですが、ドメイン モデルで継承を使用したくありません。私はEntity Frameworkを使用しており、派生エンティティが多数ある場合(私は30個あります)、パフォーマンスが非常に悪いことがわかるまで、Entity Frameworkで継承を使用していました。この性能の問題がネット上で話題になっています。継承を取り除き、標準のリレーショナル モデルを使用したいのですが、Automapper で動作させるために何をする必要があるかわかりません。
上記の例を変更すると、私の状況は次のようになります。
// Domain models in Entity Framework
public class Order
{
public virtual OnlineOrder OnlineOrder { get; set; }
public virtual MailOrder MailOrder { get; set; }
}
public class OnlineOrder
{
public virtual Order Order { get; set; }
}
public class MailOrder
{
public virtual Order Order { get; set; }
}
// My DTOs
public class OrderDto { }
public class OnlineOrderDto : OrderDto { }
public class MailOrderDto : OrderDto { }
したがって、ドメイン オブジェクトは継承を使用せず、標準のリレーショナル データベースのように相互にリンクするだけであることがわかります。ただし、DTO オブジェクトが継承を使用することを引き続き希望します。この例では Automapper をどのように使用しますか?