[英]Automapper conditional mapping with different source types
我试图从源实体的几个不同导航属性之一映射到 DTO 中的自定义类型属性,条件是它们中的哪个不为空。
简化版(删除了一些条件映射):
CreateMap<MyDTO, MyEntity>()
.ForMember(dest => dest.Order,
opt =>
{
opt.MapFrom(src => src.OrderType1 != null ? src.OrderType1 :
src.OrderTypeA.OrderType1 != null ? OrderTypeA.OrderType1 :
src.OrderType2 != null ? src.OrderType2 : null
));
它不会编译,因为 OrderType2 实体的类型与 OrderType1 不同
无法确定条件表达式的类型,因为“OrderType1”和“OrderType2”之间没有隐式转换
我尝试创建一个空类型,让两种实体类型都继承自 this,然后在条件表达式中转换为基本类型。 这将引发异常,因为它具有所有属性的未映射类型。
假设我可以重构以在整个导航属性上使用基类,并为每个实体创建从基类到派生类的映射,以使其正常工作,但感觉它会引入太多更改。
是否有使用 Automapper 的替代方法,或另一种解决问题的方法 - 有多个条件可以返回要映射的不同源类型?
看起来太简单了,但是通过在条件中强制转换为对象来使其工作:
CreateMap<MyDTO, MyEntity>()
.ForMember(dest => dest.Order,
opt =>
{
opt.MapFrom(src => src.OrderType1 != null ? src.OrderType1 :
src.OrderTypeA.OrderType1 != null ? OrderTypeA.OrderType1 :
src.OrderType2 != null ? (object)src.OrderType2 : null
));
这会运行并创建所有必需的地图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.