先建立实体,从数据库库表中拿到的表字段
public class Student
{
public int Id { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public DateTime Birthday { get; set; }
public decimal Weight { get; set; }
public decimal Height { get; set; }
}
建立数据交换模型Dto
public class StudentDto
{
public int StudentId { get; set; }
public int Age { get; set; }
public String Name { get; set; }
public decimal Weight { get; set; }
public decimal Height { get; set; }
}
编写映射文件配置,需要继承profile,这边提供一种,其他官方查看
public class StudentProfile : Profile
{
public StudentProfile()
{
CreateMap<Student, StudentDto>().ForMember(s=>s.Age, opt => opt.MapFrom(src => DateTime.Now.Year- src.Birthday.Year))
.ForMember(s=>s.StudentId,opt=>opt.MapFrom(s=>s.Id))
.ForMember(s => s.Name, opt => opt.MapFrom(s => s.FirstName+" " +s.LastName));
}
}
编写一个注入的操作类
public class StudentOperator
{
private readonly IMapper _mapper = null;
public StudentOperator(IMapper mapper)
{
_mapper = mapper;
}
public StudentDto GetStudentDto(Student student)
{
StudentDto studentDto= _mapper.Map<StudentDto>(student);
return studentDto;
}
}
控制台进行注入和调用
static void Main(string[] args)
{
ServiceCollection services = new ServiceCollection();
services.AddSingleton<StudentOperator>();
services.AddAutoMapper(s=>s.AddProfile(typeof(StudentProfile)));
var provider = services.BuildServiceProvider();
StudentOperator Soperator= provider.GetService<StudentOperator>();
Student student = new Student()
{
Id = 1,
FirstName = "Kettle",
LastName="Kiki",
Weight = 109.04m,
Height = 175.22m,
Birthday = new DateTime(1990,3,3),
};
var dto= Soperator.GetStudentDto(student);
Console.WriteLine("Hello World!");
}
}
运行后的效果