2010-06-09 9 views
5

El título lo explica todo, es lo último en lo que intento trabajar en nuestro proyecto. Estamos estructurados con una biblioteca de servicios que contiene una función como tal.ASP.Net MVC ¿Dónde se convierte de Entidades a Modelos de Vista?

 /// <summary> 
     /// Returns a single category based on the specified ID. 
     /// </summary> 
     public Category GetCategory(int CategoryID) 
     { 
      var RetVal = _session.Single<Category>(x => x.ID == CategoryID); 
      return RetVal; 
     } 

Ahora categoría es una Entidad (Estamos utilizando Entity Framework) que necesitamos para convertir eso a un CategoryViewModel.

Ahora, ¿cómo las personas estructurarían esto? ¿Se aseguraría de que la función de servicio devuelva CategoryViewModel? ¿Hace que el controlador extraiga los datos del servicio y luego llama a otra función para que coincida con un modelo de vista?

Respuesta

3

He aquí un extracto de un blog post escribí:

[AutoMap(typeof(IEnumerable<User>), typeof(IEnumerable<UserViewModel>))] 
public ActionResult Index() 
{ 
    // return all users 
    IEnumerable<User> users = Repository.GetUsers(); 
    return View(users); 
} 

En este caso la vista correspondiente es fuertemente tipado a IEnumerable<UserViewModel>. Utiliza AutoMapper para definir reglas de conversión entre entidades y modelos de vista. En cuanto al atributo [AutoMap], se trata de un filtro de acción personalizado que inspecciona el modelo pasado a la vista y aplica la conversión adecuada para que la vista solo tenga el modelo de vista.

+0

¡Solución muy elegante +1 para eso! Desconfío de AutoMapper por el uso de la reflexión. Si el sitio recibía 3 solicitudes por segundo, ¿hay algo de qué preocuparse AutoMapper? – LiamB

+0

Jimmy Bogard hizo algunas optimizaciones excelentes que mejoraron el rendimiento. Escribió una publicación en el blog: http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/08/04/analyzing-automapper-performance.aspx (actualmente hay un problema al abrir su blog, por lo que también puede probar el versión en caché: http://webcache.googleusercontent.com/search?q=cache:y1UTqDky3wcJ:www.lostechies.com/blogs/jimmy_bogard/archive/2009/08/04/analyzing-automapper-performance.aspx+automapper+reflection + performance & cd = 1 & hl = en & ct = clnk) Personalmente utilizo mucho AutoMapper en producción y nunca tuve problemas de rendimiento con él. –

+0

Gracias :) - En su ejemplo, ¿de dónde vienen "IModelMapperController" y "controller.ModelMapper"? – LiamB

Cuestiones relacionadas