我使用自動映射器來壓扁來自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