2011-03-21 13 views
11

estoy usando AutoMapper para transferir datos desde Objecta a objectBAutoMapper: mapeo parcial

classe ObjectA 
{ 
    string Title; 
    string Summary; 
} 

classe ObjectB 
{ 
    string Title; 
    string Summary; 
    IAddress Address; 
} 

he creado este tipo de mapeo entre los dos objetos

AutoMapper.Mapper.CreateMap<IObectA, IObjectB>() 
     .ForMember(dest => dest.Title,   src => src.MapFrom(s => s.Title)) 
     .ForMember(dest => dest.Summary,   src => src.MapFrom(s => s.Summary)) 
     .ForMember(dest => dest.Address,   src => src.Ignore()) 

Creo mi ObjectB y llenar toda su propiedades, incluida la dirección

Cuando llamo al asignador, esperaba que anule el título y el resumen e ignore la dirección

ObjectB = Mapper.Map<IObjectA, IObjectB>(objectA); 

En realidad, está lanzando y excepción para la dirección.

¿Qué estoy haciendo mal?

[ACTUALIZACIÓN] para expresarlo de otra manera, tengo mis objectB y quiero actualizar parte de ella con los datos procedentes de Objecta. Cuando digo Ignorar, me refiero a dejar los datos de la manera en que ya están

+0

que podría ser útil saber qué excepción que recibió ... – JoDG

+0

Parece que está haciendo todo mal. Su ejemplo de código muestra la definición de clase para ObjectA dos veces. Más tarde dices que llenas ObjectB con todas sus propiedades, pero en el último fragmento de código muestra que estás tratando de asignar objectA a objectB, y no al revés. – JoDG

+0

@JoDG, Mi error. Actualicé mi publicación inicial. lanzó una excepción de tipo 'System.Collections.Generic.KeyNotFoundException' – user385411

Respuesta

31

Encontré la solución.

Acabo de descubrir que el método Map tiene una versión sobrecargada que exceptúa un objeto de destino previamente instanciado. Gracias a este article

Mapper.Map<IObjectA, IObjectB>(objectA, ObjectB); 

@JoDG, Gracias por su ayuda

+3

El artículo vinculado a ya no existe ... :( – noocyte

+1

@noocyte: Archive.org tiene su http://web.archive.org/web/20130124102758/http://www.dominicpettifer.co.uk/Blog/45/automapper---a-custom-type-converter-that-exposes-a- valor de destino –

+3

solo como una nota, no debería necesitar especificar los tipos en <> Mapper.Map (objectA, ObjectB); Debería ser suficiente – DomenicDatti