2011-04-06 16 views
5

Tengo EF una clase EF generada de Persona que tiene varias propiedades. También tengo una clase de trabajos con varias propiedades. Una persona está relacionada con varios trabajos y, por lo tanto, Jobs es una propiedad de colección de una persona.Usando AutoMapper para mapear el modelo de vista complejo volver al modelo con propiedad de colección

he creado un modelo de vista tales como:

public class PersonViewModel 
{ 
    public Person Person{ get; set; } 
    public List<Job> Jobs{ get; set; } 
} 

Desde mi punto de vista, estoy publicando una instancia de PersonViewModel. Me gustaría utilizar AutoMapper para asignar este modelo de vista a una instancia de la persona con su propiedad de colección de trabajos llena con la lista del modelo de vista.

¿Se puede lograr esto? Hasta ahora he intentado:

Mapper.CreateMap<PersonViewModel, Person>(); 

sin suerte ...

EDIT:

OK, esto funciona realmente. Descubrí que tengo un problema en otro lado ...

El objeto Mi persona también tiene una relación uno-muchos con una tabla PersonType ... PersonType se convierte en una propiedad de navegación de Person y auto mapper está tratando de asignar esto ... aquí es donde falla ... Paso con éxito un PersonTypeID para asociar Person con el tipo de persona. Había asumido que esto sería todo lo que necesitaba hacer. ¿Cómo puedo solucionar este problema ...

EDIT 2: Así que básicamente mi mesa persona en el PP tiene una columna PersonTypeID (clave externa a PersonType tabla) ... esto se asigna como una propiedad de navegación de persona como objeto PersonType ...

de la forma en mi opinión, tengo una lista desplegable para seleccionar Tipo de persona que pasa a propiedad PersonTypeID de nuevo en el objeto persona dentro del modelo de vista ...

AutoMapper parece estar buscando un valor para la propiedad de navegación PersonType de Persona para mapear ... Obtengo un AutoMapper.AutoMapperMappingException

error

Destination property: PersonType 
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown. 

Respuesta

8

Sí, esto debería funcionar. Si el modelo y modelo de vista comparten las mismas propiedades - ya sea una colección - que serán mapeados por AutoMapper automáticamente pero:

  • que necesitan ser el mismo nombre
  • Si mapeo es de dos maneras, mapa necesario crear dos vías, así, y he encontrado incluso si se trata de una sola vía, tuve que crear las formas mapboth
  • Si tiene Job y JobViewModel por lo que las colecciones son de diferentes tipos (pero nombré de la misma manera) simplemente crea un mapa para estos ya que ll.

Mi corazonada es esto debería resolver el problema: crear mapas dos maneras de ver si ayuda:

Mapper.CreateMap<PersonViewModel, Person>(); 
Mapper.CreateMap<Person, PersonViewModel>(); 

EDITAR

Si tiene propiedades en el modelo de vista y Modelo y son de tipo diferente, AutoMapper no sabría cómo convertirlos. Así que una opción es hacer caso de ellos:

Automapper: Ignore on condition of

O usted puede utilizar la asignación de medida:

http://lostechies.com/jimmybogard/2009/05/06/automapper-feature-custom-type-converters/

+0

estás en lo correcto .. . He descubierto que mi problema radica en otra parte. He editado mi pregunta original ... Obtendrás un voto favorable para señalarme el camino correcto ... estoy sin votos para hoy :) – stephen776

+0

Gracias Stephen. OK, ¿puedes elaborar un poco más sobre tu problema, quizás agregando algún código? Tengo dificultad para entender la edición. – Aliostad

+0

Ok, agregó algo más. Espero que ayude – stephen776

0

O intentar revertir a la cartografía:

Mapper.CreateMap<Person, PersonViewModel>().ReverseMap(); 
Cuestiones relacionadas