У нас есть несколько интеграционных тестов, которые извлекают столбцы, которые представляют собой DateTimeOffsets в SQL (при выполнении более сложных запросов), но возвращают DateTimes при работе с SqlLite в базе данных памяти, поскольку он не поддерживает этот тип столбца.
Мне нужно создать обработчик / конвертер для преобразования из DateTime в DateTimeOffset для этих тестов.
Когда я пытаюсь использовать обработчик (ниже), код все еще взрывается с невозможностью преобразовать DateTime в DateTimeOffset.Могут ли это быть другие обработчики в нашей кодовой базе, потому что это примитив, а не пользовательский тип?И если да, то есть ли способ создать маппер, который будет конвертировать в DateTimeOffset, с часовым поясом по умолчанию, например, UTC?
Dapper.SqlMapper.AddTypeHandler<DateTimeOffset>(
new DateTimeOffSetInMemoryTestHandler());
var result = dbExecutor.Query<dynamic>(sql,
new { Reference = myReference}).ToList();
return Dapper.AutoMapper.MapDynamic<MyObject>(result).FirstOrDefault();
// Обработчик
public class DateTimeOffSetInMemoryTestHandler : SqlMapper.TypeHandler<DateTimeOffset>
{
public DateTimeOffSetInMemoryTestHandler()
{
}
public override DateTimeOffset Parse(object value)
{
try
{
return (DateTimeOffset)value;
}
catch (Exception)
{
return new DateTimeOffset((DateTime)value, TimeZoneInfo.Utc.BaseUtcOffset);
}
}
public override void SetValue(IDbDataParameter parameter, DateTimeOffset value)
{
throw new NotImplementedException("This Handler DateTimeOffSetInMemoryTestHandler, should only be used in tests");
}
}