Automapper空属性 [英] Automapper null properties

查看:182
本文介绍了Automapper空属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我映射我的对象与Automapper DTOS

 公共类OrderItem的:BaseDomain 
{
公共虚拟版本版本{搞定;组; }
公共虚拟INT数量{搞定;组; }
}




[DataContract]
[Serializable接口]
公共类OrderItemDTO
{
[数据成员]
公众诠释标识{搞定;组; }
[数据成员]
公共字符串的Guid {搞定;组; }
[数据成员]
公共虚拟INT? VERSIONID {搞定;组; }
[数据成员]
公共虚拟字符串版本名称{搞定;组; }
[数据成员]
公共虚拟INT数量{搞定;组; }

}



所以,当我有OrderItem的与空的版本,我得到在一个例外:

  Mapper.Map< OrderItem的,OrderItemDTO>(项目)

缺少类型的地图配置或不支持的映射。


解决方案

而不必看见你的映射代码就很难说了到底是怎么回事错误的,但我的猜测是,你正在使用类似于下面的代码映射你的类型:

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



上面的代码会失败时, OrderItem.Version 为空。为了防止这种情况,你可以传递到 ForMember 代表检查空:

  Mapper.CreateMap< OrderItem的,OrderItemDTO>()
.ForMember(DEST => dest.VersionId,选择= GT; options.MapFrom(OrderItem的= GT; orderitem.Version == NULL(INT)?空:orderitem.Version.VersionId))
.ForMember(DEST => dest.VersionName,选择= GT; options.MapFrom(OrderItem的= GT; orderitem.Version == NULL空:orderitem.Version.VersionName ))
;


I map my objects to dtos with 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; }

}

So when I have OrderItem with null version, i get an exception at:

 Mapper.Map<OrderItem, OrderItemDTO>(item)

 Missing type map configuration or unsupported mapping.

解决方案

Without having seen your mapping code it is hard to say exactly what is going wrong but my guess is that you are mapping your types with code similar to the following:

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))
      ;

The code above will fail when OrderItem.Version is null. To prevent this you can check for null in the delegates passed to 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))
      ;

这篇关于Automapper空属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆