2013-09-02 3 views
5

क्या यह निर्दिष्ट करने का कोई तरीका है कि मैं DateTime के सभी को ऑर्कलाइट को यूटीसी प्रकार पर सेट करने के लिए पूरा करता हूं?क्या डेटटाइम के लिए ऑर्मिलाइट विकल्प है। स्पेसिफीकिंड (डेटटाइमकिंड.यूटीसी)?

मैं संग्रहित प्रक्रियाओं के माध्यम से अपना डेटाबेस में DateTime रों का एक बहुत की दुकान जब एक पंक्ति सम्मिलित किया जाता है:

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

जब मैं ormlite में एक का चयन करें बयान के माध्यम से मूल्यों को पुनः प्राप्त, datetimes Unspecified वस्तु के रूप में बाहर आ (जो स्थानीय समय क्षेत्र के रूप में व्याख्या की है, मेरा मानना ​​है):

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

मैं नहीं करना पसंद करेंगे व्यक्तिगत रूप से प्रत्येक दिनांक समय वस्तु स्थापित करने के लिए:

+०१२३५१६४१०६१
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) यह या तो ऐसा करने के लिए प्रतीत नहीं होता।

+0

उन लोगों के लिए जो इस पृष्ठ पर उतर चुके हैं लेकिन स्क्लाइट बोली के साथ ऑर्मेलाइट वी 3 का उपयोग कर रहे हैं: वहां एक बग है जहां आप एक प्रकार के यूटीसी के साथ डेटटाइम जारी रखते हैं, और 0 के मिलीसेकंड्स, जब आप स्थानीय पर स्विच करते हैं डेटटाइम को वापस पढ़ें। –

उत्तर

1

SqlServerOrmLiteDialectProvider.EnsureUtc(true)काम करता है, मेरे परीक्षण मामले के साथ कुछ और चल रहा था जिसने मुझे विश्वास दिलाया कि ऐसा नहीं हुआ। उम्मीद है कि यह किसी और की मदद करेगा।

यहां कुछ नमूना कोड है:

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

उत्पादन

1,9/13/2013 5:19:12 PM,Utc,9/13/2013 10:19:12 AM,9/13/2013 5:19:12 PM 
संबंधित मुद्दे