我使用自动映射器来压扁来自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
}
使用automapper我试图拉平到这一点:
public class OrderEntity {
public decimal Amount {get;set;}
public int ProductRate {get;set;}
}
有一个映射:
CreateMap<RatedProduct, OrderEntity>();
CreateMap<MarketOrder, OrderEntity>();
以上映射不会映射ProductRate。 大气压我只是用AfterMap:
CreateMap<MarketOrder, OrderEntity>()
.AfterMap((s,d) => {
var prod = s.Product as RatedProduct;
if (prod != null)
{
//map fields
}
});
它工作得很好,但想如果我可以重用automapper压扁的可能性(即通过名称匹配),我不需要地图中后应用相当多的地方。
注意:我无法更改WS,这只是对象层次结构的一小部分。
建议感激。
这不是“多态”为多形性将意味着该基地型具有已定义的方法或属性和孩子们实现它....当你调用方法/属性的基类引用实际使用了特定的类型。在你的情况下,基类没有财产......你需要做一个沮丧。因为没有多态性,所以它是向下转换的。 – 2013-05-08 12:32:39
@jsobo,我需要将'abstract Product'中的所有属性映射到'RatedProduct'。有人可能会坚持正确使用亚型多态性,所以我按照你的说明改变了标题。 – 2013-05-08 13:36:05