AutoMapper是一个简单的小型库,用于解决一个看似复杂的问题:摆脱手动把一个对象映射到另一个对象的代码。这类对象属性赋值代码重复、沉闷无聊,AutoMapper就是用来自动完成对象映射的工具。
对象‑对象映射器:将一种类型的输入对象,转换成另一种类型的输出对象。
AutoMapper内置一套约定规则,只要目标类符合命名约定,几乎零配置就可以完成两个类型之间的映射。
手写映射代码枯燥,测试映射代码更加枯燥。AutoMapper提供简单的类型配置,同时也支持映射逻辑的单元测试。
安装
通过NuGet包管理器控制台安装
PM> Install‑Package AutoMapper
配套扩展包
- AutoMapper.Data:支持ADO.NET,可以从
IDataReader读取数据做映射 - AutoMapper.EF6:EF6的扩展方法,提供
ProjectTo异步投影扩展 - AutoMapper.Collection:集合等价映射,支持两个集合对比,做类对象相等比较
- AutoMapper.Collection.EF:结合EF主键做相等判断,自动处理集合的新增、修改、删除,实现DTO集合到数据库实体集合的持久化操作
传统手动对象赋值示例
有两个类People(源)、Person(目标),属性名字完全一样
class People
{
public int Age { set; get; }
public string Name { set; get; }
}
class Person
{
public int Age { set; get; }
public string Name { set; get; }
}Code language: JavaScript (javascript)
传统写法,手动逐个给属性赋值:
static void Main(string[] args)
{
People p = new People() { Age = 13, Name = "Jack" };
Person person = new Person();
//手动复制每一个属性,属性多时代码会非常啰嗦
person.Name = p.Name;
person.Age = p.Age;
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
Console.ReadKey();
}Code language: JavaScript (javascript)
缺点:属性越多,重复赋值代码越多;新增/修改字段,所有赋值代码都要同步修改,容易漏写产生bug。
AutoMapper的作用:代替上面手动写一堆
xxx.属性 = yyy.属性,自动按照约定复制同名属性。
Next: 安装和第一个例子