【发布时间】:2013-05-08 11:08:39
【问题描述】:
我正在使用自动映射器来展平来自 WS 的对象。简化模型如下:
public abstract class AOrder {
public Product Product {get;set;}
public decimal Amount {get;set;}
//number of other properties
}
public abstract class Product {
//product properties
}
public class RatedProduct : Product {
public int Rate { get;set;}
}
public class MarketOrder : AOrder {
//some specific market order properties
}
使用自动映射器,我试图将其展平为:
public class OrderEntity {
public decimal Amount {get;set;}
public int ProductRate {get;set;}
}
下一个映射:
CreateMap<RatedProduct, OrderEntity>();
CreateMap<MarketOrder, OrderEntity>();
上述映射不会映射 ProductRate。 Atm 我刚刚使用了 AfterMap:
CreateMap<MarketOrder, OrderEntity>()
.AfterMap((s,d) => {
var prod = s.Product as RatedProduct;
if (prod != null)
{
//map fields
}
});
效果很好,但我想如果我可以重用自动映射器展平的可能性(即按名称匹配),我就不需要在很多地方应用 after map。
注意:我无法更改 WS,这只是对象层次结构的一小部分。
建议表示赞赏。
【问题讨论】:
-
这不是“多态性”,因为多态属性意味着该基类型定义了一个方法或属性,并且子类实现了它....并且当您在基类上调用方法/属性时参考实际使用的具体类型。在您的情况下,基类没有该属性...并且您需要进行向下转换。向下转换也是如此,因为没有多态性。
-
@jsobo,我还需要将所有属性从
abstract Product映射到RatedProduct。有人可能会坚持正确使用子类型多态性,因此我按照您的说明更改了标题。
标签: flatten automapper-2