我是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 类中添加了一个中断,它永远不会被击中。
我在使用自定义类型转换器时出错了吗?。
感谢您的帮助!
答案 0 :(得分:3)
从IDataReader
转换时,AutoMapper在内部使用特殊的IObjectMapper
,忽略了您应用于映射定义的任何ITypeConverter
。据推测,这是完全控制迭代读者。
创建地图时,您可以通过ForMember
方法完成您想要实现的目标。
Mapper.CreateMap<IDataReader, OrderDest>()
.ForMember(dest => dest.OrderQuantityDest, opt => opt.MapFrom(src => (int)src["quantity"]));