2010-06-21 23 views
8

Corrijo mis objetos a dtos con Automapper.Propiedades nulo de Automapper

public class OrderItem : BaseDomain 
{ 
    public virtual Version Version { get; set; } 
    public virtual int Quantity { get; set; } 
} 




[DataContract] 
[Serializable] 
public class OrderItemDTO 
{ 
    [DataMember] 
    public int Id { get; set; } 
    [DataMember] 
    public string Guid { get; set; } 
    [DataMember] 
    public virtual int? VersionId { get; set; } 
    [DataMember] 
    public virtual string VersionName { get; set; } 
    [DataMember] 
    public virtual int Quantity { get; set; } 

} 

Así que cuando tengo de pedido con la versión nula, me sale una excepción en:

Mapper.Map<OrderItem, OrderItemDTO>(item) 

Missing type map configuration or unsupported mapping. 
+0

¿Puede publicar el código donde crea las asignaciones? –

Respuesta

21

Sin haber visto el código de mapeo es difícil decir exactamente lo que está mal, pero mi conjetura es que está correlacionando sus tipos con un código similar al siguiente:

Mapper.CreateMap<OrderItem, OrderItemDTO>() 
     .ForMember(dest => dest.VersionId, options => options.MapFrom(orderitem => orderitem.Version.VersionId)) 
     .ForMember(dest => dest.VersionName, options => options.MapFrom(orderitem => orderitem.Version.VersionName)) 
     ; 

el código anterior fallará cuando OrderItem.Version es nulo. Para evitar esto, puede verificar null en los delegados pasados ​​a ForMember:

Mapper.CreateMap<OrderItem, OrderItemDTO>() 
     .ForMember(dest => dest.VersionId, options => options.MapFrom(orderitem => orderitem.Version == null ? (int?) null : orderitem.Version.VersionId)) 
     .ForMember(dest => dest.VersionName, options => options.MapFrom(orderitem => orderitem.Version == null ? null : orderitem.Version.VersionName)) 
     ; 
+2

Pensé que Automapper sería lo suficientemente inteligente como para manejar propiedades nulas – Jordan

+5

@Jordan: Cuando creas tu propia asignación para aplanar tu estructura como en el ejemplo anterior donde usas la lambda "orderitem => orderitem.Version.VersionId" y orderitem.Version es nulo, AutoMapper no tiene manera de detectar que hay un problema en el lambda. –

+0

¿Qué versión estás usando aquí? –

Cuestiones relacionadas