Uzyskaj DateTime jako UTC z Dapper

Używam Dapper do mapowania moich obiektów na SQL Server CE. Jeśli uratujęDateTime zKind=Utc, kiedy go przeczytam, dostajęDateTime zKind=Unspecified, co prowadzi do wszelkiego rodzaju problemów.

Przykład:

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);

Ten kod daje następujące dane wyjściowe:

20/09/2012 10:04:16 (Utc)
20/09/2012 10:04:16 (Unspecified)

Wiem, że powinienem używaćDateTimeOffset, ale niestety SQL CE nie obsługuje tego typu.

Czy jest w pobliżu praca? Czy mogę powiedzieć Dapperowi, że ma wszystkie datyDateTimeKind.Utc? I bardziej ogólnie, jakie są moje opcje dostosowania mapowania?

EDIT: Moim obecnym obejściem jest załatanie dat po tym, jak Dapper zmaterializował wynik, ale trochę pachnie ...

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;
}

questionAnswers(4)

yourAnswerToTheQuestion