using AutoMapper; using AutoMapper.Internal; using System; using System.Linq; using System.Reflection; namespace Kean.Application.Utilities { /// /// 模型映射配置 /// public class AutoMapper : Profile { /// /// 初始化 Kean.Application.Utilities.AutoMapper 类的新实例 /// public AutoMapper() { /* 这是一个例子: * 只需在 ViewModels 文件夹下创建视图模型,配置与数据表实体的映射即可 * 注意:在最后 ReverseMap(),确保双向映射处理读写能力 * * CreateMap() * .ForMember(entity => entity.TEST_ID, options => options.MapFrom(viewmodel => viewmodel.Id)) * .ForMember(entity => entity.TEST_NAME, options => options.MapFrom(viewmodel => viewmodel.Name)) * .ReverseMap(); */ } } /// /// AutoMapper 扩展方法 /// internal static class AutoMapperExtension { /// /// 获取映射配置 /// /// 映射 /// ViewModel 类型名 /// 映射配置 internal static TypeMap GetMap(this IMapper mapper, string type) { var assembly = Assembly.GetExecutingAssembly(); var viewModelType = assembly.GetType($"{assembly.FullName.Split(',')[0]}.ViewModels.{type}", false, true); if (viewModelType == null) { throw new TypeLoadException("ViewModel 不存在。"); } var map = mapper.ConfigurationProvider.Internal().GetAllTypeMaps() .FirstOrDefault(m => m.SourceType == viewModelType); if (map == null) { throw new AutoMapperMappingException("未配置 ViewModel 与 Entity 之间的映射。"); } return map; } } }