Holen Sie sich DateTime als UTC mit Dapper

Ich verwende Dapper, um meine Entitäten SQL Server CE zuzuordnen. Wenn ich einen speichereDateTime mitKind=UtcWenn ich es zurück lese, bekomme ich eineDateTime mitKind=Unspecified, was zu allerlei Problemen führt.

Beispiel:

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

Dieser Code gibt die folgende Ausgabe aus:

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

Ich weiß, ich sollte eine verwendenDateTimeOffsetLeider unterstützt SQL CE diesen Typ nicht.

Gibt es eine Problemumgehung? Kann ich Dapper sagen, dass er davon ausgehen soll, dass alle Daten vorliegenDateTimeKind.Utc? Und im Allgemeinen: Welche Optionen stehen zur Verfügung, um das Mapping anzupassen?

BEARBEITEN: Meine aktuelle Problemumgehung besteht darin, die Daten zu patchen, nachdem Dapper das Ergebnis materialisiert hat, aber es riecht irgendwie ...

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage