2013-09-07 3 views
0

I'm построения automapper со следующими структурами:C# MVC3 Automapper класс, содержащий список

Домен:

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, так как у меня есть сиглевое поле с одним полем и список с другим списком. Может кто-то пожалуйста, помогите мне ...

Кроме того, я могу спросить, если это действительно нуждается в Automapper ....

[EDIT]

Рабочий код:

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

Там не нужно явно указывать Msg на SysMsg, если оно было изменено на одно имя.

ответ

1

Вам необходимо сопоставить EnterpriseInfo с HomeLogonHomeViewModel. Я бы предложил назвать класс Msg в домене SysMsg или наоборот. Затем explicity сопоставьте член CompanyName и член SysMsg. Что-то вроде этого ...

Mapper.CreateMap<EnterpriseInfo,HomeLogonHomeViewModel>() 
    .ForMember(dest=>dest.CompanyName,opt=> opt.Name) 
    .ForMember(dest=>dest.SysMsg, opt=>opt.SysMsg); 
+0

Grag, спасибо. Меня беспокоит тип List <>. Будет ли AutoMapper автоматически решать MsgList? – Mendes

+0

Вам не нужно беспокоиться о конструкциях List <>. Automapper автоматически сопоставляет каждый элемент в списке, если объект объекта сопоставляется. – Greg

+0

Да, я заметил это после некоторого чтения документа. Он работает нормально. Благодарю. – Mendes

Смежные вопросы