先说下写这篇文章的初衷,让实体和表对应字段映射,数据传输模型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
查看数据库表字段是否正确
调试增、删、改查接口,确定接口是否正常即可。