我是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"]));