У меня есть ситуация, когда мои DTO требуют DateTime
свойств, но мои POCOs используют значения с нулевым значением. Чтобы не создавать ForMember
сопоставлений для каждого свойства с этим условием, я создал ITypeConverter<DateTime?, DateTime>
. Проблема, с которой я столкнулся, заключается в том, что как DTO, так и POCO имеют значение NULL, допускающее нулевое значение, которое вызывается этим конвертером. Значение DestinationType
равно DateTime
, хотя свойство равно NULL. Любая идея, как я буду делать этот конвертер работать только для фактических нулевых datetimes?Nullable datetime to datetime converter automapper
public class FooDTO
{
public DateTime? FooDate { get; set; }
}
public class FooPoco
{
public DateTime? FooDate { get; set; }
}
class Program
{
static void Main(string[] args)
{
Mapper.CreateMap<FooDTO, FooPoco>();
Mapper.CreateMap<DateTime?, DateTime>()
.ConvertUsing<NullableDateTimeConverter>();
var poco = new FooPoco();
Mapper.Map(new FooDTO() { FooDate = null }, poco);
if (poco.FooDate.HasValue)
Console.WriteLine(
"This should be null : {0}",
poco.FooDate.Value.ToString()); //Value is always set
else
Console.WriteLine("Mapping worked");
}
}
public class NullableDateTimeConverter : ITypeConverter<DateTime?, DateTime>
{
// Since both are nullable date times and this handles converting
// nullable to datetime I would not expect this to be called.
public DateTime Convert(ResolutionContext context)
{
var sourceDate = context.SourceValue as DateTime?;
if (sourceDate.HasValue)
return sourceDate.Value;
else
return default(DateTime);
}
}
Я нашел этот пост AutoMapper TypeConverter mapping nullable type to not-nullable type, но это мало помогает.
Yup, что сделал это. хоки, но работает. Спасибо за вашу помощь. – JSessions
Вы должны иметь возможность упростить его немного дальше, если хотите, и встроить 'NullableDateTimeConverter' в' CreateMap'. Было не так много, чтобы выиграть, поэтому я не беспокоился, но мог бы сделать это немного меньше * hokie * :) – Mightymuke