我在多語言站點中使用EF將SP的結果映射到對象。使用其他文化時錯誤的DateTime解析
ctx.Database.SqlQuery<MyDTO>("MySP {0}", Id).SingleOrDefault()
我發現在文化發生變化時映射日期存在問題。
更具體地說,根據用戶的文化,我得到的日期與16/12/2015 09:06:15
或12/16/2015 09:06:15
相同。
我知道兩個解決辦法:
- 獲取日期爲一個字符串,用
CultureInfo.InvariantCulture
解析它。 - 在調用存儲庫方法之前將文化切換爲
CultureInfo.CultureInvariant
。
也許還有另一種選擇:
- 我看到我們同時改變:
Thread.CurrentThread.CurrentUICulture
和Thread.CurrentThread.CurrentCulture
用戶的語言環境,但我認爲我們應該只切換UI之一。但我不知道如果我改變這個會破壞什麼...
有沒有其他的選擇,比如在EF上下文中設置文化?
更新: Chaning的Thread.CurrentThread.CurrentUICulture
和Thread.CurrentThread.CurrentCulture
只是在做查詢似乎並沒有幫助之前。這令人困惑......也許英孚在較早的時候緩存了這種文化?
如果您將datetime數據*視爲* datetime數據,那麼應該沒有問題。只有在將數據轉換爲*字符串*時纔會出現格式問題。 *儘可能避免*轉換。那麼,你最後怎麼會像* 12/16/2015 09:06:15這樣的字符串? –
@Damien_The_Unbeliever嗨。我最終想出了這一個。 :)我沒有使用字符串,我只是查看手錶中DateTime的值。這實際上是問題......看起來手錶使用當前線程的文化。原來日期是正確的(這個:'12/16/2015 09:06:15'無論如何不可能是有效的日期......永遠不會意識到......:D)太遲了。這個錯誤是後來在代碼中。我將在下面發佈答案。 – user2173353