自动绘图器用派生类型属性进行平坦化



我使用自动调制器来调平来自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
         }
     });

工作得很好,但我想如果我能重用自动器的平坦化可能性(即按名称匹配),我就不需要在很多地方应用after映射了。

注意:我不能改变WS,这只是对象层次结构的一小部分。

建议感激。

Rate映射到ProductRate使用" member "

相当直接

你必须对特定类型进行强制转换以查看它是否是该类型,这有点棘手,但我认为你采取的相同方法是你可能必须做的,但我认为你不需要做"aftermap"。我认为你所有的目标映射必须被找到,否则你需要将它们标记为忽略映射将失败。

您可以做的另一件事就是更改OrderEntity。ProductRate为OrderEntity.Rate。然后它会找到它并为您映射它,除了它被隐藏的地方,因为Product没有速率(但RatedProducts有)。

public class OrderEntity {
   public decimal Amount {get;set;}
   public int Rate {get;set;}  //changed name from ProductRate to just Rate.
}
 Mapper.CreateMap<Product, OrderEntity>()
    .Include<RatedProduct, OrderEntry>();
 Mapper.CreateMap<RatedProduct, OrderEntry>();

参见:集合中的多态元素类型

相关内容

  • 没有找到相关文章

最新更新