AutoMapper referencing a map within a map

Actually struggling to accomplish this, I basically try to pass my Indexlist ClubViewModel, but for this I need to match my list Club. I use AutoMapperand everything works fine except for the materials CalendarEntry, which is a list in my database model and a flattened class in my view model.

I really do not want to change my view model, since I have a Create view the way I want it (bools for each day and the associated start / end times).

First of all, this is a controller that successfully matches most of the class:

    public ActionResult Index()
    {   
        var clubsList = _service.GetAllClubs();
        IList<ClubViewModel> clubsViewModelList = new List<ClubViewModel>();

        foreach (var item in clubsList)
        {
            clubsViewModelList.Add(AutoMapper.Mapper.Map<ClubViewModel>(item));                
        }               
        return View(clubsViewModelList);
    }

Enums, Web ViewModels

   public class Club
    {        
        public int ClubId { get; set; }        
        public string Organisation { get; set; }
        public List<CalendarEntry> MeetingDays { get; set; }        
    }

    public class CalendarEntry
    {
        public int CalendarEntryId { get; set; }
        public int ClubId { get; set; }
        public Days Day { get; set; }
        public DateTime From { get; set; }
        public DateTime To { get; set; }      
    }

    public enum Days
    {
        Monday,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday,
        Sunday
    }

    public class ClubViewModel
    {
        public int ClubId { get; set; }
        public string Organisation { get; set; }
        public CalendarEntryViewModel CalendarEntryViewModel { get; set; }      
    }

    public class CalendarEntryViewModel
    { 
        public bool IsMonday { get; set; }
        public bool IsTuesday { get; set; }
        public bool IsWednesday { get; set; }
        public bool IsThursday { get; set; }
        public bool IsFriday { get; set; }     
        public DateTime? MondayFrom { get; set; }        
        public DateTime? MondayTo { get; set; }        
        public DateTime? TuesdayFrom { get; set; }        
        public DateTime? TuesdayTo { get; set; }        
        public DateTime? WednesdayFrom { get; set; }        
        public DateTime? WednesdayTo { get; set; }        
        public DateTime? ThursdayFrom { get; set; }        
        public DateTime? ThursdayTo { get; set; }        
        public DateTime? FridayFrom { get; set; }        
        public DateTime? FridayTo { get; set; }
    }

, AutoMapper :

public static void RegisterMappings()
        {
            Mapper.CreateMap<Club, ClubViewModel>()                

                .ForMember(dest => dest.CalendarEntryViewModel,
                opts => opts.Ignore());

                Mapper.CreateMap<CalendarEntry, CalendarEntryViewModel>()

                    .ForMember(dest => dest.IsMonday, opts => opts.Equals(true))
                    .ForMember(dest => dest.IsTuesday, opts => opts.Equals(true))
                    .ForMember(dest => dest.IsWednesday, opts => opts.Equals(true))
                    .ForMember(dest => dest.IsThursday, opts => opts.Equals(true))
                    .ForMember(dest => dest.IsFriday, opts => opts.Equals(true))

                    .ForMember(dest => dest.MondayFrom, opts => opts.Equals(DateTime.Now))
                    .ForMember(dest => dest.MondayTo, opts => opts.Equals(DateTime.Now))
                    .ForMember(dest => dest.TuesdayFrom, opts => opts.Equals(DateTime.Now))
                    .ForMember(dest => dest.TuesdayTo, opts => opts.Equals(DateTime.Now))
                    .ForMember(dest => dest.WednesdayFrom, opts => opts.Equals(DateTime.Now))
                    .ForMember(dest => dest.WednesdayTo, opts => opts.Equals(DateTime.Now))
                    .ForMember(dest => dest.ThursdayFrom, opts => opts.Equals(DateTime.Now))
                    .ForMember(dest => dest.ThursdayTo, opts => opts.Equals(DateTime.Now))
                    .ForMember(dest => dest.FridayFrom, opts => opts.Equals(DateTime.Now))
                    .ForMember(dest => dest.FridayTo, opts => opts.Equals(DateTime.Now));

                Mapper.AssertConfigurationIsValid();
        }

bools/date, .

- CalendarEntry CalendarEntryViewModel Club ClubViewModel , ?

+4
1

CalendarEntryViewModel, . .., .

, :

foreach (var item in clubsList)
{
    clubsViewModelList.Add(AutoMapper.Mapper.Map<ClubViewModel>(item));                
}

Automapper ... :

var clubsViewModelList = Mapper.Map<IList<Club>, IList<ClubViewModel>>(clubsList);

, , , ... . . , , , , ​​ . :

public class ClubViewModel
{
    public int ClubId { get; set; }
    public string Organisation { get; set; }
    public IList<CalendarEntryViewModel> CalendarEntries { get; set; } // <--- a list of them      
}

:

.ForMember(dest => dest.IsMonday, opt => opt.MapFrom(src => src.Day == Days.Monday))
.ForMember(dest => dest.IsTuesday, opt => opt.MapFrom(src => src.Day == Days.Tuesday))
/* etc... */

:

public DateTime? From { get; set; }        
public DateTime? To { get; set; }

:

foreach (var club in clubsViewModelList) {
    club.CalendarEntries = club.CalendarEntries.OrderBy(x => x.Day).ToList();
}

, , :

@foreach (var calendarEntry in club.CalendarEntries) {
    Day: @calendarEntry.Day.ToString()
    From: @calendarEntry.From.ToString("D")
}

.. ..

.. :

public class ClubCalendarEntryCreateViewModel {
    /* other properties here */
    public IList<CalendarEntryViewModel> Days { get; set; }
}

:

viewModel.CalendarEntries = new ClubCalendarEntryCreateViewModel {
    Days = new List<CalendarEntryViewModel>() {
        new CalendarEntryViewModel {
            IsMonday = true
        },
        new CalendarEntryViewModel {
            IsTuesday = true
        },
        /* etc... */
    }
};

POST. :

club.CalendarEntries = Mapper.Map<IList<CalendarEntryViewModel>, IList<CalendarEntry>>(viewModel.CalendarEntries.Days);

(, CalendarEntry).. , , . , , . , ( ), .

, ... , , , , ( , ).

+2

All Articles