Anexsoft | Blog y dictado de cursos de Tecnología

En este encontrarás tutoriales de tecnología como PHP, ASP.NET MVC, Front-End, entre otros y cursos exigentes de modalidad online que te ayudarán a crecer profesionalmente.

Tutorial fácil de AutoMapper para ASP.NET MVC
Actualizado el 21 Enero, 2016 y leído 5,446 veces
Calificación: 10.00 / 10

Tutorial fácil de AutoMapper para ASP.NET MVC

Anexsoft

¿Qué es AutoMapper?

Es una utilidad que encontramos en el Nuget que nos permite mapear objetos de manera automática. Es decir con esta herramienta nos ahorramos el trabajo de mapear un objeto manualmente, ya que el AutoMapper lo hará por nosotros.

Ejemplo: pasar la clase Alumno a AlumnoViewModel sin tener que codificar líneas de código para indicar que propiedad queremos setear.

 

¿Cómo se instala?

Como mencioné lo encontramos en el Nuget, pues lo que nos tocar hacer es agregar dicha referencia a nuestro proyecto.

Bien, ya lo tenemos instalado.

 

¿Cómo funciona?

Vamos a crear 2 clases, una se llamará Usuario y la otra UsuarioViewModel. Basicamente, la segunda contiene menor información y/o propiedades que no existen en en la clase Padre (primera clase) por llamarlo así y lo que vamos hacer es mapear la clase Usuario al ViewModel sin tener que hacerlo manualmente.

public class Usuario
{
    public int ID { get; set; }
    public string Nombre { get; set; }
    public string Apellido { get; set; }
    public string Email { get; set; }
    public string Profesion { get; set; }
    public DateTime Nacimiento { get; set; }        
    public Pais Pais { get; set; }
}

public class UsuarioViewModel {
    public int ID { get; set; }
    public string Nombre { get; set; }
    public string Email { get; set; }
    public int Edad { get; set; }
    public string Pais { get; set; }
}

Como dije, la segunda clase contiene menor información que la primera, solo se ha considerado el nombre, una propiedad adicional que se llama Edad (la cual calcularemos en base a la fecha de nacimiento) y tenemos la propiedad Pais como una cadena, ya que solo nos interesa el nombre de este.

UsuarioRepository

Bien, he creado un pequeño repositorio el cual contedrá la lógica de negocio para trabajar con el Usuario, en nuestro caso tiene un simple método Obtener y el código está en duro para evitar tener que crear una base de datos. La idea es que se entienda.

public class UsuarioRepository
{
    public static Usuario Obtener()
    {
        return new Usuario
        {
            ID = 1,
            Nombre = "Eduardo",
            Apellido = "Rodríguez Patiño",
            Email = "hitogoroshi@outlook.com",
            Profesion = "Analista Programador",
            Nacimiento = new DateTime(1989, 2, 11),
            Pais = PaisRepository.Listar().FirstOrDefault()
        };
    }
}

En nuestro controlador vamos a llamar a este método y mapear el Usuario a UsuarioViewModel.

public ActionResult Index()
{
    AutoMapper.Mapper.CreateMap<Usuario, UsuarioViewModel>();
    var viewModel = AutoMapper.Mapper.Map<UsuarioViewModel>(UsuarioRepository.Obtener());

    return View(viewModel);
}

 

¿Funcionó?

Si, reconoció las propiedades de la clase Usuario y las paso las que contenga el UsuarioViewModel, pero ignoró el campo edad, en vez de guardar el nombre del país guardo el nombre de la clase y adicionalmente queremos que guarde el apellido dentro de la propiedad Nombre.

Bien, hemos visto como mapear un objeto a otro. Para la mayoría de los casos sabemos que el AutoMapper busca coincidencias con la clase a mapear y rellena la información. Ahora vamos a darle solución a este problema específico.

 

Diciéndole al AutoMapper como debe mapear la información

Para ello vamos a crear una clase de configuración para el AutoMapper donde vamos a definir un comportamiento para que este entienda como setear la información. Este lo creamos en la carpeta AppStart con el nombre de AutoMapperConfig.

public static class AutoMapperConfig
{
    public static void RegisterMappings()
    {
        AutoMapper.Mapper.CreateMap<Usuario, UsuarioViewModel>()
            .ForMember(x => x.Pais, x => x.MapFrom(y => y.Pais.Nombre))
            .ForMember(x => x.Nombre, x => x.MapFrom(y => string.Format("{0} {1}", y.Nombre, y.Apellido)))
            .ForMember(x => x.Edad, x => x.MapFrom(y => DateTime.Now.Year - y.Nacimiento.Year));
    }
}

Resumiendo, ForMember el primer parámetro que recibe es la propiedad que queremos setear, en nuestro caso las del ViewModel, aquellas que no lo hizo correctamente y el segundo parámetro es lo que vamos a setear, ahí agregamos nuestra lógica.

Finalmente, agregamos a nuestro Global.asax el llamado al AutoMapperConfig en el método Application_Start()

protected void Application_Start()
{
    AutoMapperConfig.RegisterMappings();
}

Si volvemos a compilar nuestro proyecto ya debería haber seteado correctamente la información.

 

Cualquier duda me dejan un comentario.

 

¡Adquiera ya!

  • Código de fuente de Red Social desarrollada en ASP.NET MVC

    Código de fuente de Red Social desarrollada en ASP.NET MVC
  • Software de Venta e Inventario hecho en PHP y Codeigniter

    Software de Venta e Inventario hecho en PHP y Codeigniter
  • Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

    Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

Últimas publicaciones

Encuesta

¿Cómo nos conociste?

Síguenos

Estudia con nosotros y crece profesionalmente

Nuestros cursos han sido hecho en base a lo que demanda el mercado hoy en día.
La experiencia obtenida es la de un ambiente laboral.

Anexsoft
© 2017 Anexsoft, blog y cursos online de TI.