AutoMapper - 使用customtype转换器将数据表映射到类对象

时间:2013-11-20 00:14:48

标签: c# asp.net asp.net-mvc automapper

我是AutoMapper的新手,有几个关于数据到对象映射的问题。我做了一些工作,但似乎出了点问题。

Mapper.CreateMap<IDataReader, OrderDest>().ConvertUsing<OrderDestTypeConverter>();

public class OrderDestTypeConverter : ITypeConverter<IDataReader, OrderDest>
    {
        public OrderDest Convert(ResolutionContext context)
        {
            var dest = new OrderDest();
            if (!context.IsSourceValueNull && context.SourceValue is IDataReader)
            {
                var dr = (IDataReader) context.SourceValue;
                dest.OrderQuantityDest = (int) dr["quantity"];
            }
            return dest;
        }
    }

在我的存储库类中 - 我正在这样做

  var crs = new CustomerRespositorySimulator();
  DataTable orderlistsource = crs.GetCustomerOrders(12345);
  var orderlistdest = Mapper.Map<IDataReader, List<OrderDest>>(orderlistsource.CreateDataReader());

由于某种原因,映射不起作用。我甚至在自定义类型转换器 OrderDestTypeConverter 类中添加了一个中断,它永远不会被击中。

我在使用自定义类型转换器时出错了吗?。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

IDataReader转换时,AutoMapper在内部使用特殊的IObjectMapper,忽略了您应用于映射定义的任何ITypeConverter。据推测,这是完全控制迭代读者。

创建地图时,您可以通过ForMember方法完成您想要实现的目标。

Mapper.CreateMap<IDataReader, OrderDest>()
    .ForMember(dest => dest.OrderQuantityDest, opt => opt.MapFrom(src => (int)src["quantity"]));