AutoMapper - 使用自定义类型转换器将DataTable映射到类对象

3

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

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个回答

3

当从IDataReader进行转换时,AutoMapper在内部使用特殊的IObjectMapper,忽略了您应用于映射定义的任何ITypeConverter。这可能是为了完全控制通过读取器的迭代。

您想要实现的目标可以通过创建映射时使用ForMember方法来完成。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接