217  
查询码:00000482
abp.net core框架 数据传输模型Dto、实体模型Entity、表字段 相关映射配置
作者: 魏漫漫 于 2020年03月26日 发布在分类 / 人防组 / 人防后端 下,并于 2020年03月26日 编辑
实体 DTO 表映射

先说下写这篇文章的初衷,让实体和表对应字段映射,数据传输模型dto与实体模型对应字段映射;
情况如下
1、我的实体模型Entity继承了另外一个实体类接口,目前实体模型Entity跟数据库字段对应不上,通过如下配置,匹配映射:
文件结构如下:


配置解决方法:
第一步:在EntityFrameworkCore,创建文件夹EntityMapper,下面创建实体映射文件ExpertMap。

代码如下:

  public class ExpertMap : IEntityTypeConfiguration<Expert>
    {
        public void Configure(EntityTypeBuilder<Expert> builder)
        {
            builder.ToTable("Expert");
            builder.HasKey(m => m.Id);//主键  
            builder.Property(m => m.ExpertName).HasColumnName("Name");//列名
            builder.Property(m => m.ExpertSex).HasColumnName("Sex");
            builder.Property(m => m.OrganizationName).HasColumnName("WorkUnit");
            builder.Property(m => m.ExpertTitle).HasColumnName("Title");
            builder.Property(m => m.ExpertPhone).HasColumnName("Phone");
            builder.Property(m => m.ExpertField).HasColumnName("TechnicalExpertise");
             
            
        }
    }
第二步:配置映射关系
文件位置:

配置信息:

贴代码:
  //配置实体与表映射关系
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.ApplyConfiguration(new ExpertMap()); 
            base.OnModelCreating(modelBuilder);
        }


      

2、目前实体和表映射了,但是我的数据模型dto和实体没有映射,接下来配置数据模型dto与实体的映射关系。
第一步:dto的映射关系调整

第二步:
创建文件夹Mapper,创建映射文件ExpertMapper.cs

代码如下:

 public class ExpertMapper
    {
        /// <summary>
        /// ExpertMapper数据传输对象映射
        /// </summary>
        public static void CreateMapper(IMapperConfigurationExpression mapper)
        {
            //字段映射
            mapper.CreateMap<CreateExpertDto, Expert>().ForMember(dst => dst.ExpertName, opt => opt.MapFrom(src => src.Name))
                                                       .ForMember(dst => dst.ExpertSex, opt => opt.MapFrom(src => src.Sex))
                                                       .ForMember(dst => dst.OrganizationName, opt => opt.MapFrom(src => src.WorkUnit))
                                                       .ForMember(dst => dst.ExpertTitle, opt => opt.MapFrom(src => src.Title))
                                                       .ForMember(dst => dst.ExpertPhone, opt => opt.MapFrom(src => src.Phone))
                                                       .ForMember(dst => dst.ExpertField, opt => opt.MapFrom(src => src.TechnicalExpertise));

         
            mapper.CreateMap<UpdateExpertDto, Expert>().ForMember(dst => dst.ExpertName, opt => opt.MapFrom(src => src.Name))
                                                        .ForMember(dst => dst.ExpertSex, opt => opt.MapFrom(src => src.Sex))
                                                        .ForMember(dst => dst.OrganizationName, opt => opt.MapFrom(src => src.WorkUnit))
                                                        .ForMember(dst => dst.ExpertTitle, opt => opt.MapFrom(src => src.Title))
                                                        .ForMember(dst => dst.ExpertPhone, opt => opt.MapFrom(src => src.Phone))
                                                        .ForMember(dst => dst.ExpertField, opt => opt.MapFrom(src => src.TechnicalExpertise));

            mapper.CreateMap<DetailExpertDto, Expert>().ForMember(dst => dst.ExpertName, opt => opt.MapFrom(src => src.Name))
                                                          .ForMember(dst => dst.ExpertSex, opt => opt.MapFrom(src => src.Sex))
                                                          .ForMember(dst => dst.OrganizationName, opt => opt.MapFrom(src => src.WorkUnit))
                                                          .ForMember(dst => dst.ExpertTitle, opt => opt.MapFrom(src => src.Title))
                                                          .ForMember(dst => dst.ExpertPhone, opt => opt.MapFrom(src => src.Phone))
                                                          .ForMember(dst => dst.ExpertField, opt => opt.MapFrom(src => src.TechnicalExpertise));
            mapper.CreateMap< Expert,DetailExpertDto>().ForMember(dst => dst.Name , opt => opt.MapFrom(src => src.ExpertName))
                                                        .ForMember(dst => dst.Sex, opt => opt.MapFrom(src => src.ExpertSex))
                                                        .ForMember(dst => dst.WorkUnit, opt => opt.MapFrom(src => src.OrganizationName))
                                                        .ForMember(dst => dst.Title, opt => opt.MapFrom(src => src.ExpertTitle ))
                                                        .ForMember(dst => dst.Phone, opt => opt.MapFrom(src => src.ExpertPhone ))
                                                        .ForMember(dst => dst.TechnicalExpertise, opt => opt.MapFrom(src => src.ExpertField ));



        }
    }
}

第三步;映射关系配置



贴代码:
 Configuration.Modules.AbpAutoMapper().Configurators.Add(ExpertMapper.CreateMapper);//专家映射信息

最后:测试,首先,数据库表字段同步:
执行Add-Migration name
Update-database
查看数据库表字段是否正确
调试增、删、改查接口,确定接口是否正常即可。


 推荐知识

 历史版本

修改日期 修改人 备注
2020-03-26 15:49:13[当前版本] 魏漫漫 创建版本

 附件

附件类型

PNGPNG

知识分享平台 -V 4.8.7 -wcp