sql-server - DateTime.SpecifyKind(DateTimeKind.Utc) 是否有 OrmLite 选项?

标签 sql-server utc ormlite-servicestack

有没有办法指定我希望 OrmLite 实现的所有 DateTime 设置为 UTC 类型?

插入行时,我通过存储过程在数据库中存储大量 DateTime:

insert [Comment] (
  Body
, CreatedOn
) values (
  @Body
, getutcdate()
);

当我通过 ormlite 中的 select 语句检索值时,日期时间以 Unspecified 形式出现(我相信这被解释为本地时区):

var comments = db.SqlList<Comment>("select * from [Comment] where ... ");

我希望单独设置每个 DateTime 对象:

foreach (var comment in comments) {
    comment.CreatedOn = DateTime.SpecifyKind(comment.CreatedOn, DateTimeKind.Utc);
}

我发现了这个问题,但我认为这不是我想要的:
servicestack ormlite sqlite DateTime getting TimeZone adjustment on insert

还发现this pull request ,但设置 SqlServerOrmLiteDialectProvider.EnsureUtc(true) 似乎也不起作用。

最佳答案

SqlServerOrmLiteDialectProvider.EnsureUtc(true) 确实有效,我的测试用例中还发生了其他事情,让我相信它没有。希望这对其他人有帮助。

这是一些示例代码:

模型.cs

public class DateTimeTest {
    [AutoIncrement]
    public int Id { get; set; }
    public DateTime CreatedOn { get; set; }
}

测试.cs

var connectionString = "server=dblcl;database=flak;trusted_connection=true;";
var provider = new SqlServerOrmLiteDialectProvider();
provider.EnsureUtc(true);
var factory = new OrmLiteConnectionFactory(connectionString, provider);
var connection = factory.Open();

connection.CreateTable(true, typeof(DateTimeTest));
connection.ExecuteSql("insert DateTimeTest (CreatedOn) values (getutcdate())");
var results = connection.SqlList<DateTimeTest>("select * from DateTimeTest");

foreach(var result in results) {
    Console.WriteLine("{0},{1},{2},{3},{4}", result.Id, result.CreatedOn, result.CreatedOn.Kind, result.CreatedOn.ToLocalTime(), result.CreatedOn.ToUniversalTime());
}

输出

1,9/13/2013 5:19:12 PM,Utc,9/13/2013 10:19:12 AM,9/13/2013 5:19:12 PM

关于sql-server - DateTime.SpecifyKind(DateTimeKind.Utc) 是否有 OrmLite 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580980/

相关文章:

SQL错误处理

sql-server - Microsoft Access 错误 : "Because of your security settings and current security policy, this control is disabled"

javascript - 时间日期对象 JavaScript getUTCMilliseconds

servicestack - 超时已过。 - 在 ServiceStack 服务中使用 Db

servicestack - 使用 OrmLite 和 SQL 加载* POCO 引用

design-patterns - ServiceStack + ORMLite + 存储库模式

sql - 验证类型 2 缓慢变化的维度表

sql - 插入针对特定列的触发器检查

c# - 如何让 Newtonsoft 按原样反序列化日期并将其命名为 utc?

oracle - 尝试在 Oracle 中检索 UTC 时间戳,使用 "from_tz"是否会导致问题?