Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射在映射中引用映射_C#_Automapper - Fatal编程技术网

C# 自动映射在映射中引用映射

C# 自动映射在映射中引用映射,c#,automapper,C#,Automapper,我真的很难做到这一点,我基本上是在尝试为我的索引查看ClubViewModel列表,但要做到这一点,我需要匹配我的俱乐部列表。我使用的是AutoMapper,除了CalendarEntry这是我的数据库模型中的一个列表和视图模型中的一个扁平类之外,一切都很正常 我真的不想改变我的视图模型,因为我以我想要的方式创建视图(每天的bools和相关的开始/完成时间) 首先是控制器,它成功地映射了大部分类: public ActionResult Index() {

我真的很难做到这一点,我基本上是在尝试为我的
索引
查看
ClubViewModel
列表,但要做到这一点,我需要匹配我的
俱乐部
列表。我使用的是
AutoMapper
,除了
CalendarEntry
这是我的数据库模型中的一个列表和视图模型中的一个扁平类之外,一切都很正常

我真的不想改变我的视图模型,因为我以我想要的方式创建视图(每天的bools和相关的开始/完成时间)

首先是控制器,它成功地映射了大部分类:

    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);
    }
public ActionResult Index()
{   
var clubsList=_service.GetAllClubs();
IList clubsViewModelList=新列表();
foreach(clubsList中的变量项)
{
添加(AutoMapper.Mapper.Map(项));
}               
返回视图(clubsViewModelList);
}
以下是我的存储库模型枚举以及我的Web视图模型

   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; }
    }
公共班级俱乐部
{        
public int ClubId{get;set;}
公共字符串组织{get;set;}
公共列表会议日期{get;set;}
}
公共类日历条目
{
public int CalendarEntryId{get;set;}
public int ClubId{get;set;}
公众日{get;set;}
来自{get;set;}的公共日期时间
公共日期时间{get;set;}
}
公众普查日
{
星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日
}
公共类ClubViewModel
{
public int ClubId{get;set;}
公共字符串组织{get;set;}
公共CalendarEntryViewModel CalendarEntryViewModel{get;set;}
}
公共类CalendarEntryViewModel
{ 
公共bool IsMonday{get;set;}
公共bool IsTuesday{get;set;}
公共bool是星期三{get;set;}
公共bool IsThursday{get;set;}
公共布尔值为星期五{get;set;}
公共日期时间?星期一从{get;set;}
公共日期时间?星期一到{get;set;}
公共日期时间?星期二从{get;set;}
公共日期时间?星期二到{get;set;}
公共日期时间?星期三从{get;set;}
公共日期时间?星期三到{get;set;}
公共日期时间?星期四从{get;set;}
公共日期时间?星期四{get;set;}
公共日期时间?FridayFrom{get;set;}
公共日期时间?星期五到{get;set;}
}
最后,这里是我的自动映射配置方法

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();
        }
公共静态无效注册表映射()
{
Mapper.CreateMap()
.FormMember(dest=>dest.CalendarEntryViewModel,
opts=>opts.Ignore());
Mapper.CreateMap()
.ForMember(dest=>dest.IsMonday,opts=>opts.Equals(true))
.ForMember(dest=>dest.IsTuesday,opts=>opts.Equals(true))
.ForMember(dest=>dest.is周三,opts=>opts.Equals(true))
.FormMember(dest=>dest.IsThursday,opts=>opts.Equals(true))
.FormMember(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))
.FormMember(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));
assertConfigurationsValid();
}
目前,我只是硬编码布尔值/日期,而我试图让事情正常进行


我是否可以将第二个
CalendarEntry
添加到
CalendarEntryViewModel
映射到
Club
映射作为附加成员添加到
ClubViewModel
映射,或者我这样做是完全错误的?

您应该解压缩
CalendarEntryViewModel
,以便它更接近地表示日历进入您的域。您当前正试图将列表推入展开的对象中。。这会让你以后更加痛苦

在此之前,我必须提到:

foreach (var item in clubsList)
{
    clubsViewModelList.Add(AutoMapper.Mapper.Map<ClubViewModel>(item));                
}
然后,删除所有可为空的日期,并仅用两个字段表示此条目:

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; }
}
公共类ClubCalendarEntryCreateViewModel{
/*这里还有其他物业吗*/
公共IList天数{get;set;}
}
然后在控制器中:

viewModel.CalendarEntries = new ClubCalendarEntryCreateViewModel {
    Days = new List<CalendarEntryViewModel>() {
        new CalendarEntryViewModel {
            IsMonday = true
        },
        new CalendarEntryViewModel {
            IsTuesday = true
        },
        /* etc... */
    }
};
viewModel.CalendarEntries=新建ClubCalendarEntryCreateViewModel{
天数=新列表(){
新的CalendarEntryViewModel{
IsMonday=true
},
新的CalendarEntryViewModel{
IsTuesday=true
},
/*等等*/
}
};
Th
@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... */
    }
};
club.CalendarEntries = Mapper.Map<IList<CalendarEntryViewModel>, IList<CalendarEntry>>(viewModel.CalendarEntries.Days);