我使用Automapper将对象映射到dtos。
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; }
}
因此,当我使用null版本的OrderItem时,我得到一个例外:
Mapper.Map<OrderItem, OrderItemDTO>(item)
Missing type map configuration or unsupported mapping.
答案 0 :(得分:23)
如果没有看到您的映射代码,很难确切地说出了什么问题,但我的猜测是您使用类似于以下代码映射您的类型:
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))
;
OrderItem.Version
为空时,上面的代码将失败。为防止这种情况,您可以在传递给ForMember
的代理中检查null:
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))
;