AutoMapper é uma biblioteca pequena e simples que resolve um problema aparentemente complexo: livrar-se de mapear manualmente um objeto para outro. Esse tipo de código de atribuição de propriedades é repetitivo e entediante — o AutoMapper é a ferramenta que automatiza o mapeamento de objetos.
Mapeador objeto a objeto: Converte um objeto de entrada de um tipo em um objeto de saída de outro tipo.
O AutoMapper possui um conjunto de regras de convenção integradas. Desde que a classe de destino siga as convenções de nomenclatura, o mapeamento entre dois tipos pode ser feito com quase nenhuma configuração.
Escrever código de mapeamento à mão é tedioso, e testá-lo é ainda mais. O AutoMapper fornece configuração de tipo simples e também suporta testes unitários da lógica de mapeamento.
Instalação
Instalar via Console do Gerenciador de Pacotes NuGet
PM> Install-Package AutoMapper
Pacotes de extensão complementares
- AutoMapper.Data: Suporte a ADO.NET, permite mapear a partir de um
IDataReader - AutoMapper.EF6: Métodos de extensão para EF6, fornece projeção assíncrona
ProjectTo - AutoMapper.Collection: Mapeamento de equivalência de coleções, suporta comparar duas coleções e realizar comparação de igualdade de objetos
- AutoMapper.Collection.EF: Combina com chaves primárias do EF para julgar igualdade, trata automaticamente adição/modificação/exclusão de coleções, realizando operações de persistência de coleções DTO para coleções de entidades do banco de dados
Exemplo tradicional de atribuição manual de objetos
Duas classes People (origem) e Person (destino) com exatamente os mesmos nomes de propriedade
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)
Abordagem tradicional: atribuir manualmente cada propriedade uma por uma:
static void Main(string[] args)
{
People p = new People() { Age = 13, Name = "Jack" };
Person person = new Person();
// Copiar manualmente cada propriedade; quando há muitas propriedades, o código fica muito verboso
person.Name = p.Name;
person.Age = p.Age;
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
Console.ReadKey();
}Code language: JavaScript (javascript)
Desvantagens: Quanto mais propriedades houver, mais código repetitivo de atribuição; ao adicionar/modificar campos, todo o código de atribuição deve ser atualizado de acordo, e é fácil esquecer algo e introduzir bugs.
O que o AutoMapper faz: Substitui escrever manualmente um monte de instruções
xxx.Propriedade = yyy.Propriedade, copiando automaticamente propriedades com o mesmo nome de acordo com as convenções.
O que é AutoMapper