Я использую Dapper для сопоставления своих объектов с SQL Server CE. Если я сохраняю DateTime
с Kind=Utc
, когда я его прочитаю, я получаю DateTime
с Kind=Unspecified
, что приводит к возникновению всех проблем.
Пример:
var f = new Foo { Id = 42, ModificationDate = DateTime.UtcNow };
Console.WriteLine("{0} ({1})", f.ModificationDate, f.ModificationDate.Kind);
connection.Execute("insert into Foo(Id, ModificationDate) values(@Id, @ModificationDate)", f);
var f2 = connection.Query<Foo>("select * from Foo where Id = @Id", f).Single();
Console.WriteLine("{0} ({1})", f2.ModificationDate, f2.ModificationDate.Kind);
Этот код дает следующий результат:
20/09/2012 10:04:16 (Utc)
20/09/2012 10:04:16 (Unspecified)
Я знаю, что должен использовать DateTimeOffset
, но, к сожалению, SQL CE не поддерживает этот тип.
Есть ли обходной путь? Могу ли я сказать Dapper, что все даты имеют DateTimeKind.Utc
? И в общем, каковы мои настройки для настройки отображения?
EDIT: Моим текущим обходным путем является исправление дат после того, как Dapper материализовал результат, но он немного пахнет...
var results = _connection.Query<Foo>(sql, param).Select(PatchDate);
...
static Foo PatchDate(Foo f)
{
if (f.ModificationDate.Kind == DateTimeKind.Unspecified)
f.ModificationDate = DateTime.SpecifyKind(f.ModificationDate, DateTimeKind.Utc);
return f;
}