Использование automapper с datetime и bool для представления половины дня в POCO - PullRequest
2 голосов
/ 14 июня 2011

Скажем, у меня есть POCO, в котором хранится диапазон дат следующим образом:

public class DateRange()
{
public DateTime FromDate{get;set;}
public DateTime ToDate{get;set;}
}

Я хочу иметь возможность сохранить половину дня в начале и / или конце диапазона.Для этого я собираюсь представить свои данные в качестве средства выбора даты jqueryui для даты от и до даты, а также флажок рядом с каждым средством выбора даты, чтобы обозначить 1/2 дня.Моя модель представления будет выглядеть примерно так:

public class DateRangeModel()
{
public DateTime FromDate {get; set;}
public DateTime ToDate{get;set;}
public bool IsFromDateHalfDay{get; set;}
public bool IsToDateHalfDay {get; set;}
}

Когда флажок 1/2 дня установлен для FromDate, мне нужно сохранить FromDate в объекте как выбранный день + 12 часов и когда 1 /Флажок 2 дня установлен для ToDate в ViewModel. Мне нужно сохранить ToDate в объекте как выбранный день + 12 часов.

Возможно ли это сделать с помощью Automapper?Если нет, не могли бы вы предложить лучший / другой подход?Я не хочу, чтобы bool представлял полдня в сущности, потому что я хочу использовать только DateTimes для вычислений.

Некоторые примеры (Все еще размышляете о том, как я должен представлять диапазон от 1 дня до 1/2 в день - нам нужно много тестировать расчетные диапазоны!):

A Date Range of 1/2 Day From 24th May to a full day 27th May:
2011-05-24 12:00:00.000 => 2011-05-28 00:00:00.000

A Date Range of Full Day From 24th May to a 1/2 day 27th May:
2011-05-24 00:00:00.000 => 2011-05-27 12:00:00.000

A Half Day on 24th May:
2011-05-24 12:00:00.000 => 2011-05-25 00:00:00.000     

A Full Day on 24th May:
2011-05-24 12:00:00.000 > 2011-05-25 00:00:00.000

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

Джимми Богард говорит о том, чтобы сделать нечто подобное здесь: http://lostechies.com/jimmybogard/2009/05/06/automapper-feature-custom-type-converters/

Принцип заключается в том, что вы должны создать собственное отображение. На этапе сопоставления вы должны принять во внимание два логических значения, однако они не будут включены в целевой тип.

1 голос
/ 14 июня 2011

Предполагается ли, что FromDate / ToDate могут быть только полными днями (12:00 AM) или полднями (12:00 PM)?

Домен для просмотра (при необходимости):

CreateMap<DateRange, DateRangeModel>()
    .ForMember(dest => dest.IsFromDateHalfDay, opts => opts.MapFrom(src=>src.FromDate.Hour == 12))
    .ForMember(dest => dest.IsToDateHalfDay, opts => opts.MapFrom(src=>src.ToDate.Hour == 12));

Просмотр домена

CreateMap<DateRangeModel, DateRange>()
    .ForMember(dest => dest.FromDate, opts => opts.MapFrom(src=>src.FromDate.AddHours(-1 * src.IsFromDateHalfDay ? 12 : 0))
    .ForMember(dest => dest.ToDate, opts => opts.MapFrom(src=>src.ToDate.AddHours(src.IsToDateHalfDay ? 12 : 0));
...