2013-09-02 12 views
5

Gibt es eine Möglichkeit, anzugeben, dass ich alle der DateTime s, die Ormlite materialisiert auf UTC Art gesetzt werden soll?Gibt es eine OrmLite-Option für DateTime.SpecifyKind (DateTimeKind.Utc)?

speichere ich eine Menge DateTime s in meiner Datenbank über gespeicherte Prozeduren, wenn eine Zeile eingefügt:

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

Wenn ich die Werte über eine select-Anweisung in ormlite abzurufen, die Datetimes in Unspecified Art kommen (die als lokale Zeitzone interpretiert wird, glaube ich):

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

ich nicht lieber einzeln jedes Datetime-Objekt zu setzen:

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

fand ich diese Frage, aber ich glaube nicht ganz, es ist, was ich zu fragen:
servicestack ormlite sqlite DateTime getting TimeZone adjustment on insert

gefunden Auch this pull request, aber SqlServerOrmLiteDialectProvider.EnsureUtc(true) Einstellung scheint nicht entweder zu tun.

+0

Für diejenigen, die auf dieser Seite gelandet sind, aber Ormlite v3 mit Sqlite-Dialekt verwenden: Es gibt einen Fehler, bei dem wenn Sie eine DateTime mit einer Art von Utc beibehalten und eine Millisekunde von 0, die Kind auf Local wechselt lies das DateTime zurück. –

Antwort

1

funktioniert, da war noch etwas anderes mit meinem Testfall, der mich zu der Annahme führte, dass es nicht so war. Hoffentlich hilft das jemand anderem.

Hier ist ein Beispielcode:

model.cs

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

Test.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()); 
} 

Ausgang

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