0

我有以下映射:

        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 的所有详细信息,而只需要密钥对 logoID、logoName。

当我将徽标附加到我的项目时,它可以工作。但是当没有附加徽标时出现运行时错误。错误在 CreateMap ...ConvertUsing 行上。

知道当我没有任何徽标时如何避免 CreateMap 错误吗?

谢谢。

4

2 回答 2

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,您的代码仍然会失败。

我当然会考虑重新考虑代码,也许可以摆脱 Logo Map。

于 2012-08-25T06:50:21.940 回答
0

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

        CreateMap<Project, ProjectDTO>()
            .ForMember(dest => dest.Logo, opt => opt.MapFrom(src => src.Logo == null ? null : src.Logo));
于 2012-08-25T08:53:01.083 回答