ormlite-servicestack,Sql Server,Utc,ormlite Servicestack" /> ormlite-servicestack,Sql Server,Utc,ormlite Servicestack" />

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

Sql server DateTime.SpecifyKind(DateTimeKind.Utc)是否有OrmLite选项?,sql-server,utc,ormlite-servicestack,Sql Server,Utc,ormlite Servicestack,是否有一种方法可以指定我希望将OrmLite具体化的日期时间的全部设置为UTC种类 当插入一行时,我通过存储过程在数据库中存储了大量的DateTimes: insert [Comment] ( Body , CreatedOn ) values ( @Body , getutcdate() ); 当我通过ormlite中的select语句检索这些值时,datetimes以Unspecified的形式出现(我相信它被解释为本地时区): 我发现了这个问题,但我认为这不是我想要的: 也找到

是否有一种方法可以指定我希望将OrmLite具体化的
日期时间
全部设置为UTC种类

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

insert [Comment] (
  Body
, CreatedOn
) values (
  @Body
, getutcdate()
);
当我通过ormlite中的select语句检索这些值时,datetimes以
Unspecified
的形式出现(我相信它被解释为本地时区):

我发现了这个问题,但我认为这不是我想要的:


也找到了,但是设置
SqlServerOrmLiteDialectProvider.EnsureUtc(true)
似乎也不起作用。

SqlServerOrmLiteDialectProvider.EnsureUtc(true)
确实起作用,我的测试用例中还发生了一些事情,这让我相信它不起作用。希望这能帮助其他人

下面是一些示例代码:

model.cs

public class DateTimeTest {
    [AutoIncrement]
    public int Id { get; set; }
    public DateTime CreatedOn { get; set; }
}
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());
}
测试.cs

public class DateTimeTest {
    [AutoIncrement]
    public int Id { get; set; }
    public DateTime CreatedOn { get; set; }
}
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());
}

对于那些可能已登录此页面但正在使用OrmLite v3和Sqlite方言的用户:存在一个错误,如果您将日期时间保留为Utc类型,毫秒为0,则当您读取日期时间时,该类型将切换为本地。
1,9/13/2013 5:19:12 PM,Utc,9/13/2013 10:19:12 AM,9/13/2013 5:19:12 PM