2009-10-16 16 views
5

Mucha gente ha escrito sobre el uso de Automapper para mapear objetos de dominio (modelos) para ver modelos, lo cual me parece muy interesante y útil, pero mi pregunta es cómo hacer lo contrario. Entiendo la complejidad de este proceso y por qué Automapper no funciona en ese escenario, pero tengo que hacerlo mucho con la publicación de formularios, especialmente cuando actualizo.Actualización de modelos complejos en escenarios de envío de formularios y MVC

Tengo un modelo, lo asigno a un modelo de vista y luego presento un formulario para el usuario. Luego, se publica el formulario y como los modelos pueden ser bastante complejos, utilizo ModelBinders personalizados para manejar la respuesta y crear un nuevo modelo, que no se conservará directamente. En cambio, cargo el modelo original desde el DB y llamo a un método para actualizarlo desde el publicado sin romper nada. Pero esto se vuelve repetitivo y tal vez haya un mejor enfoque.

Los ejemplos que he visto son muy limitados e ingenuos, pero en nuestra aplicación podemos tener ahora más de 50 escenarios de publicación de formularios como este y en crecimiento.

Respuesta

3

Si quieres ir a la otra dirección, primero debe crear el mapa a la otra dirección, Mapper.Map()

A continuación, es posible que desee crear convertidores de tipos (Mapper.CreateMap(). ConvertUsing()), ya que a veces las formas pueden ser más ... string-y.

Luego, es posible que deba ignorar o usar valores de destino. Esto se puede configurar con ForMember (entity => entity.Id, opt => opt.Ignore()) o ForMember (entity => entity.ChildCollection, opt => opt.UseDestinationValue()).

Finalmente, querrá usar la sobrecarga que toma un objeto de destino existente, Mapper.Map (dto, entidad).

+0

No me refiero exclusivamente al uso de Automapper, pero gracias por la excelente respuesta, intentaré esto lo antes posible. –

Cuestiones relacionadas