Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
Asp.net mvc 3 AutoMapper投影-日期/时间_Asp.net Mvc 3_Automapper - Fatal编程技术网

Asp.net mvc 3 AutoMapper投影-日期/时间

Asp.net mvc 3 AutoMapper投影-日期/时间,asp.net-mvc-3,automapper,Asp.net Mvc 3,Automapper,我的实体中有一个DateTime字段,它需要映射到ViewModel中日期和时间的两个单独字段,即 // Entity public partial class Event { public Int64 Id { get; set; } public String Title { get; set; } public DateTime StartDateTime { get; set; } public DateTime

我的实体中有一个DateTime字段,它需要映射到ViewModel中日期和时间的两个单独字段,即

// Entity
  public partial class Event
    {
        public Int64 Id { get; set; }
        public String Title { get; set; }
        public DateTime StartDateTime { get; set; }
        public DateTime EndDateTime { get; set; }
    }

// ViewModel
public class EventAddEditViewModel
    {
        public Int64 Id { get; set; }
        public String Title { get; set; }
        public String StartDate { get; set; }
        public String EndDate { get; set; }
        public String StartTime { get; set; }
        public String EndTime { get; set; }
    }
查看,我有以下映射:

    Mapper.CreateMap<Event, EventAddEditViewModel>()
            .ForMember(dest => dest.StartDate, opt => opt.MapFrom(src => src.StartDateTime.Date))
            .ForMember(dest => dest.StartTime, opt => opt.MapFrom(src => src.StartDateTime.TimeOfDay))
            .ForMember(dest => dest.EndDate, opt => opt.MapFrom(src => src.EndDateTime.Date))
            .ForMember(dest => dest.EndTime, opt => opt.MapFrom(src => src.EndDateTime.TimeOfDay));
Mapper.CreateMap()
.ForMember(dest=>dest.StartDate,opt=>opt.MapFrom(src=>src.StartDateTime.Date))
.ForMember(dest=>dest.StartTime,opt=>opt.MapFrom(src=>src.StartDateTime.TimeOfDay))
.ForMember(dest=>dest.EndDate,opt=>opt.MapFrom(src=>src.EndDateTime.Date))
.ForMember(dest=>dest.EndTime,opt=>opt.MapFrom(src=>src.EndDateTime.TimeOfDay));

这很好。但是,如何反转映射,即Mapper.CreateMap(),以便在发布表单时也映射

我做了一些与您类似的事情,但是我在ViewModel上启动了DateTime作为DateTime属性,并且有两个小时和分钟的int属性 e、 g

这意味着我可以这样做映射

Mapper.CreateMap<Event, EventAddEditViewModel>()
    .ForMember(dest => dest.StartDate, opt => opt.MapFrom(src => src.StartDateTime.Date))
    .ForMember(dest => dest.StartHour, opt => opt.MapFrom(src => src.StartDateTime.Hour))
    .ForMember(dest => dest.StartMinute, opt => opt.MapFrom(src => src.StartDateTime.Minute))
    .ForMember(dest => dest.EndDate, opt => opt.MapFrom(src => src.StartDateTime.Date))
    .ForMember(dest => dest.EndHour, opt => opt.MapFrom(src => src.EndDateTime.Hour))
    .ForMember(dest => dest.EndMinute, opt => opt.MapFrom(src => src.StartDateTime.Minute));

Mapper.CreateMap<EventAddEditViewModel, Event>()
    .ForMember(dest => dest.StartDateTime, opt => opt.MapFrom(src => new DateTime(src.StartDate.Year, src.StartDate.Month, src.StartDate.Day, src.StartHour, src.StartMinute, 0)))
    .ForMember(dest => dest.EndDateTime, opt => opt.MapFrom(src => new DateTime(src.EndDate.Year, src.EndDate.Month, src.EndDate.Day, src.EndHour, src.EndMinute, 0)));
Mapper.CreateMap()
.ForMember(dest=>dest.StartDate,opt=>opt.MapFrom(src=>src.StartDateTime.Date))
.ForMember(dest=>dest.StartHour,opt=>opt.MapFrom(src=>src.StartDateTime.Hour))
.FormMember(dest=>dest.StartMinute,opt=>opt.MapFrom(src=>src.StartDateTime.Minute))
.FormMember(dest=>dest.EndDate,opt=>opt.MapFrom(src=>src.StartDateTime.Date))
.ForMember(dest=>dest.EndHour,opt=>opt.MapFrom(src=>src.EndDateTime.Hour))
.ForMember(dest=>dest.EndMinute,opt=>opt.MapFrom(src=>src.StartDateTime.Minute));
Mapper.CreateMap()
.ForMember(dest=>dest.StartDateTime,opt=>opt.MapFrom(src=>newdatetime(src.StartDate.Year,src.StartDate.Month,src.StartDate.Day,src.StartHour,src.StartMinute,0)))
.ForMember(dest=>dest.EndDateTime,opt=>opt.MapFrom(src=>newdatetime(src.EndDate.Year,src.EndDate.Month,src.EndDate.Day,src.EndHour,src.EndMinute,0));

您应该考虑沿着这些行更改视图模型属性,因为整数将更容易处理,但是如果它们必须是字符串,则需要从字符串中解析出DATETIME对象。根据字符串的格式,可以使用这些行

Mapper.CreateMap<EventAddEditViewModel, Event>()
    .ForMember(dest => dest.StartDateTime, opt => opt.MapFrom(src => DateTime.Parse( src.StartDate + " " + src.StartTime)))
    .ForMember(dest => dest.EndDateTime, opt => opt.MapFrom(src => DateTime.Parse(src.EndDate + " " + src.EndTime)));
Mapper.CreateMap()
.ForMember(dest=>dest.StartDateTime,opt=>opt.MapFrom(src=>DateTime.Parse(src.StartDate+“”+src.StartTime)))
.ForMember(dest=>dest.EndDateTime,opt=>opt.MapFrom(src=>DateTime.Parse(src.EndDate+“”+src.EndTime));

@StanK,对于这种情况,我有更简单的映射语法:

Mapper.CreateMap()
.ForMember(dest=>dest.StartDateTime,opt=>opt.MapFrom(src=>src.StartDate.Add(src.StartTime.TimeOfDay)))
.ForMember(dest=>dest.EndDateTime,opt=>opt.MapFrom(src=>src.EndDate.Add(src.EndTime.TimeOfDay));

谢谢!我想把hour:min放在ViewModel中,这样用户就更容易输入/选择时间(类似于谷歌日历)。
Mapper.CreateMap<EventAddEditViewModel, Event>()
    .ForMember(dest => dest.StartDateTime, opt => opt.MapFrom(src => DateTime.Parse( src.StartDate + " " + src.StartTime)))
    .ForMember(dest => dest.EndDateTime, opt => opt.MapFrom(src => DateTime.Parse(src.EndDate + " " + src.EndTime)));
Mapper.CreateMap<EventAddEditViewModel, Event>()
    .ForMember(dest => dest.StartDateTime, opt => opt.MapFrom(src => src.StartDate.Add(src.StartTime.TimeOfDay)))
    .ForMember(dest => dest.EndDateTime, opt => opt.MapFrom(src => src.EndDate.Add(src.EndTime.TimeOfDay)));