CodeGo.net> 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类中附加了一个中断,它从未被击中.

我在使用customtype转换器时做错了吗?

感谢您的帮助!.

解决方法:

从IDataReader转换时,AutoMapper在内部使用特殊的IObjectMapper,而忽略了已应用于映射定义的任何ITypeConverter.大概是这样,它就可以完全控制通过阅读器进行的迭代.

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

Mapper.CreateMap<IDataReader, OrderDest>()
    .ForMember(dest => dest.OrderQuantityDest, opt => opt.MapFrom(src => (int)src["quantity"]));
上一篇:带有DataReader的AutoMapper DynamicMap针对接口


下一篇:映射到接口类型属性,而无需创建具体类