我正在使用 Dapper 将我的实体映射到 SQL Server CE。如果我保存一个DateTime
with Kind=Utc
,当我读回它时,我会得到一个DateTime
with 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
吗?更一般地说,我有哪些自定义映射的选项?
编辑:我目前的解决方法是在 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;
}