多言語サイトで EF を使用して、SP からオブジェクトに結果をマップしています。
ctx.Database.SqlQuery<MyDTO>("MySP {0}", Id).SingleOrDefault()
カルチャが変更されたときの日付のマッピングに問題があることがわかりました。
より具体的には、ユーザーの文化に応じて、16/12/2015 09:06:15
またはと同じ日付を取得します。12/16/2015 09:06:15
私はこれに対する2つの解決策を知っています:
- 日付を文字列として取得し、 で解析し
CultureInfo.InvariantCulture
ます。 CultureInfo.CultureInvariant
リポジトリ メソッドを呼び出す前にカルチャを切り替えます。
そしておそらく別のオプションがあります:
Thread.CurrentThread.CurrentUICulture
とユーザーのロケールの両方を変更しているように見えThread.CurrentThread.CurrentCulture
ますが、UI のみを切り替える必要があると思います。しかし、これを変更すると何が壊れるかわかりません...
EF コンテキストにカルチャを設定するなど、代替手段はありますか?
更新:
クエリを実行する直前にThread.CurrentThread.CurrentUICulture
and を変更Thread.CurrentThread.CurrentCulture
しても、どちらも役に立たないようです。それは紛らわしいです...おそらく、EFは以前の時点でカルチャをキャッシュしますか?