0

次の構造を持つオートマッパーを構築しています。

ドメイン:

public class EnterpriseInfo
{
    public string Name { get; set; }
    public string Description { get; set; }
    public bool Installed { get; set; }
    public bool Enabled { get; set; }
    public List<Msg> MsgList { get; set; }

    ...some methods...
}


public class Msg
{ 
    public DateTime DateTime { get; set; }
    public string From { get; set; }
    public string Message { get; set; }
 }

ViewModel クラス:

public class HomeLogonHomeViewModel
{
    public string CompanyName;
    public List<SysMsg> MsgList;
}

   public class SysMsg 
   {   
        public DateTime DateTime { get; set; }
        public string From { get; set; }
        public string Message { get; set; }
   }

ビューでは、次のようなものを表示する必要があります。

Messages for company: BALBALBALBA

12/12/12 00:00 From: AAA Message: Nnonononon
12/12/12 00:00 From: AAA Message: Nnonononon
12/12/12 00:00 From: AAA Message: Nnonononon
12/12/12 00:00 From: AAA Message: Nnonononon
12/12/12 00:00 From: AAA Message: Nnonononon
12/12/12 00:00 From: AAA Message: Nnonononon

単一のフィールドを持つ単一フィールドと別のリストを持つリストがあるため、オートマッパーの構成に問題があります。誰か助けてくれませんか...

また、これが本当に Automapper を必要とするかどうかを尋ねるかもしれません....

[編集]

作業コード:

    Mapper.CreateMap<EnterpriseInfo, HomeLogonHomeViewModel>()
        .ForMember(dest => dest.CompanyName, opt => opt.MapFrom(src => src.Name));

同名に変更した場合、Msg を SysMsg に明示する必要はありません。

4

1 に答える 1

1

EnterpriseInfo を HomeLogonHomeViewModel にマップする必要があります。ドメイン内の Msg クラスの名前を SysMsg にするか、その逆にすることをお勧めします。次に、CompanyName メンバーと SysMsg メンバーを明示的にマップします。このようなもの...

Mapper.CreateMap<EnterpriseInfo,HomeLogonHomeViewModel>()
  .ForMember(dest=>dest.CompanyName,opt=> opt.Name)
  .ForMember(dest=>dest.SysMsg, opt=>opt.SysMsg);
于 2013-09-07T16:33:56.020 に答える