存在空值时的CreateMap错误

时间:2012-08-25 06:39:45

标签: asp.net asp.net-mvc automapper

我有以下映射:

        CreateMap<Logo, KeyValuePair<int, string>>()
            .ConvertUsing(s => new KeyValuePair<int, string>(s.LogoID, s.LogoName));

        CreateMap<Project, ProjectDTO>()
            .ForMember(dest => dest.Logo, opt => opt.MapFrom(src => src.Logo));

以下是模型:

public class Project
{
    [Key]
    public int      ProjectID       { get; set; }
    public string   Name            { get; set; }
    public virtual  Logo Logo { get; set; }
}

public class Logo
{
    [Key]
    public int    LogoID { get; set; }
    public string LogoName { get; set; }
    public byte[] LogoContent { get; set; }
    public string LogoContentType { get; set; }
}

public class ProjectDTO : BaseDTO<ProjectDTO, Project>
{
    public int ProjectID { get; set; }
    public string Name { get; set; }
    public KeyValuePair<int, string> Logo { get; set; }
}

正如您所看到的,在我的ProjectDTO中,我不想要Logo的所有细节,只需要keypair logoID,logoName。

当我的项目附有徽标时,它可以正常工作。但是当没有附加徽标时,我收到了运行时错误。错误发生在CreateMap ... ConvertUsing行。

任何想法,当我没有任何徽标时,如何避免CreateMap错误?

感谢。

2 个答案:

答案 0 :(得分:0)

试试这个

public class Project
{
    [Key]
    public int      ProjectID       { get; set; }
    public string   Name            { get; set; }
    private Logo _logo = new Logo();
    public virtual  Logo Logo 
          { get {return _logo;} set{_logo = value;} }
}

但是如果您的许多项目没有徽标并且相同的密钥可能会再次插入地图,即LogoID为0,则您的代码仍会失败。

我当然会考虑重新考虑代码可能会删除徽标地图。

答案 1 :(得分:0)

我找到了解决问题的方法:

        CreateMap<Project, ProjectDTO>()
            .ForMember(dest => dest.Logo, opt => opt.MapFrom(src => src.Logo == null ? null : src.Logo));