安装AutoMapper.Data程序包后,AutoMap才有了IDataReader的映射扩展功能,并且在AutoMap初始化配置的时候添加配置IDataReader的映射,如下面所示代码中
cfg.AddDataReaderMapping();
以下所示代码全部在程序包AutoMapper 8.0.0版本以及AutoMapper.Data为3.0.0版本进行开发的,如代码复制到项目中出现异常信息,请注意检查版本信息。附程序包nuget安装命令
install-package AutoMapper -version 8.0.0
install-package AutoMapper.Data -version 3.0.0
/// <summary> /// AutoMapper扩展 /// </summary> public static class AutoMapperExtension { /// <summary> /// 创建Mapper /// </summary> /// <typeparam name="TSource">要被转化的model</typeparam> /// <typeparam name="TDestination">转化之后的model</typeparam> /// <returns></returns> private static IMapper CreateMapper<TSource, TDestination>() { var config = new MapperConfiguration(cfg => { cfg.AddDataReaderMapping(); cfg.CreateMap<TSource, TDestination>(); }); ; var mapper = config.CreateMapper(); return mapper; } /// <summary> /// 创建Mapper /// </summary> /// <param name="sourceType">要被转化的model类型</param> /// <param name="destinationType">转化之后的model类型</param> /// <returns></returns> private static IMapper CreateMapper(Type sourceType, Type destinationType) { var config = new MapperConfiguration(cfg => cfg.CreateMap(sourceType, destinationType)); ; var mapper = config.CreateMapper(); return mapper; } /// <summary> /// 类型映射 /// </summary> /// <typeparam name="TDestination">转化之后的model</typeparam> /// <param name="obj">可以使用这个扩展方法的类型</param> /// <returns>转化之后的实体</returns> public static TDestination MapTo<TDestination>(this object obj) where TDestination : class { var mapper = CreateMapper(obj.GetType(), typeof(TDestination)); return mapper.Map<TDestination>(obj); } /// <summary> /// 类型映射 /// </summary> /// <typeparam name="TDestination">转化之后的model</typeparam> /// <typeparam name="TSource">要被转化的model</typeparam> /// <param name="source">可以使用这个扩展方法的类型</param> /// <returns>转化之后的实体</returns> public static TDestination MapTo<TDestination, TSource>(this TSource source) where TDestination : class where TSource : class { if (source == null) return default(TDestination); var mapper = CreateMapper<TSource, TDestination>(); return mapper.Map<TDestination>(source); } /// <summary> /// 类型映射,默认字段名字一一对应 /// </summary> /// <typeparam name="TDestination">转化之后的model</typeparam> /// <typeparam name="TSource">要被转化的model</typeparam> /// <param name="source">可以使用这个扩展方法的类型</param> /// <returns>转化之后的实体</returns> public static List<TDestination> MapTo<TDestination>(this IEnumerable source) where TDestination : class { if (source == null) return default(List<TDestination>); var mapper = CreateMapper(source.AsQueryable().ElementType, typeof(TDestination)); return mapper.Map<List<TDestination>>(source); } /// <summary> /// 类型映射 /// </summary> /// <typeparam name="TDestination">转化之后的model</typeparam> /// <typeparam name="TSource">要被转化的model</typeparam> /// <param name="source">可以使用这个扩展方法的类型</param> /// <returns>转化之后的实体</returns> public static List<TDestination> MapTo<TDestination, TSource>(this IEnumerable<TSource> source) where TDestination : class where TSource : class { if (source == null) return default(List<TDestination>); var mapper = CreateMapper<TSource, TDestination>(); return mapper.Map<List<TDestination>>(source); } /// <summary> /// DataTable映射 /// </summary> /// <typeparam name="TDestination">转化之后的model</typeparam> /// <param name="dt">DataTable对象</param> /// <returns></returns> public static List<TDestination> MapTo<TDestination>(this DataTable dt) where TDestination : class { if (dt == null || dt.Rows.Count == 0) return default(List<TDestination>); var mapper = CreateMapper<IDataReader, TDestination>(); return mapper.Map<List<TDestination>>(dt.CreateDataReader()); } /// <summary> /// DataSet映射 /// </summary> /// <typeparam name="TDestination">转化之后的model</typeparam> /// <param name="ds">DataSet对象</param> /// <param name="tableIndex">DataSet中要映射的DataTable的索引</param> /// <returns></returns> public static List<TDestination> MapTo<TDestination>(this DataSet ds, int tableIndex = 0) where TDestination : class { if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) return default(List<TDestination>); var mapper = CreateMapper<IDataReader, TDestination>(); return mapper.Map<List<TDestination>>(ds.Tables[tableIndex].CreateDataReader()); } }
分类:
AutoMapper
标签:
AutoMapper
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)