Profile作用:把大量映射规则抽离到独立类,不要全部堆在Main方法,方便管理多个实体映射。
1、自定义Profile类
继承AutoMapper提供的Profile,在构造函数写映射关系,可以一次性写多条CreateMap。
using AutoMapper;
/// <summary>
/// 映射配置类
/// </summary>
public class MappingProfile : Profile
{
public MappingProfile()
{
// Person → People
CreateMap<Person, People>();
// People → Person,双向映射
CreateMap<People, Person>();
}
}Code language: HTML, XML (xml)
方式1:初始化时添加Profile
Mapper.Initialize(x => x.AddProfile<MappingProfile>());Code language: JavaScript (javascript)
方式2:完整写法,实例化Profile对象
var mc = new MapperConfigurationExpression();
mc.AddProfile(new MappingProfile());
Mapper.Initialize(mc);Code language: JavaScript (javascript)
2、加载多个Profile
项目业务复杂,会拆分多个Profile类,可以一次性全部注册:
Mapper.Initialize(x =>
{
x.AddProfile<MappingProfile>();
x.AddProfile<MappingProfile2>();
});Code language: HTML, XML (xml)
完整Program示例
class Program
{
static void Main(string[] args)
{
// =========配置:加载Profile映射=========
Mapper.Initialize(x => x.AddProfile<MappingProfile>());
// 源对象、目标对象
Person p = new Person()
{
Age = 12,
Name = "Tom",
Birthday = DateTime.Now,
Sex = true,
Salary = 10000
};
People peo = new People()
{
Age = 36,
Name = "Jack",
Birthday = DateTime.Now,
Sex = true,
Salary = 102000
};
// 正向映射 Person → People
Mapper.Map(p, peo);
// 反向映射 People → Person
Mapper.Map(peo, p);
Console.WriteLine(peo.Name);
Console.WriteLine(p.Name);
Console.ReadKey();
}
}Code language: JavaScript (javascript)
Previous: 安装和第一个例子
Next: 扁平化映射(Flattening)