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 では、ロゴのすべての詳細が必要ではなく、キーペアのロゴ ID とロゴ名だけが必要です。

プロジェクトにロゴが添付されている場合に機能します。しかし、ロゴが添付されていない場合、実行時エラーが発生しました。エラーは CreateMap ...ConvertUsing 行にあります。

ロゴがない場合に CreateMap エラーを回避するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

0

私は自分の問題の解決策を見つけました:

        CreateMap<Project, ProjectDTO>()
            .ForMember(dest => dest.Logo, opt => opt.MapFrom(src => src.Logo == null ? null : src.Logo));
于 2012-08-25T08:53:01.083 に答える
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 の場合、コードは失敗します。

私は確かに、コードを少しリファクタリングして、ロゴマップを取り除くことを考えています.

于 2012-08-25T06:50:21.940 に答える