什么是AutoMapper

AutoMapper是一个简单的小型库,用于解决一个看似复杂的问题:摆脱手动把一个对象映射到另一个对象的代码。这类对象属性赋值代码重复、沉闷无聊,AutoMapper就是用来自动完成对象映射的工具。

对象‑对象映射器:将一种类型的输入对象,转换成另一种类型的输出对象。

AutoMapper内置一套约定规则,只要目标类符合命名约定,几乎零配置就可以完成两个类型之间的映射。

手写映射代码枯燥,测试映射代码更加枯燥。AutoMapper提供简单的类型配置,同时也支持映射逻辑的单元测试。

安装

通过NuGet包管理器控制台安装

PM> Install‑Package AutoMapper

配套扩展包

  1. AutoMapper.Data:支持ADO.NET,可以从IDataReader读取数据做映射
  2. AutoMapper.EF6:EF6的扩展方法,提供ProjectTo异步投影扩展
  3. AutoMapper.Collection:集合等价映射,支持两个集合对比,做类对象相等比较
  4. 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.属性,自动按照约定复制同名属性。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注