【发布时间】:2016-03-24 21:43:18
【问题描述】:
我在多语言站点中使用 EF 将结果从 SP 映射到对象。
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 上下文中设置文化?
更新:
在进行查询之前更改Thread.CurrentThread.CurrentUICulture 和Thread.CurrentThread.CurrentCulture 似乎也无济于事。这令人困惑……也许 EF 在更早的时候缓存了文化?
【问题讨论】:
-
如果您始终将日期时间数据视为日期时间数据,则应该没有问题。只有将数据转换为 strings 时才会出现格式问题。 避免尽可能多的转化。那么,你一开始是怎么得到像
12/16/2015 09:06:15这样的字符串的呢? -
@Damien_The_Unbeliever 你好。我最终弄清楚了这一点。 :) 我没有使用字符串,我只是在手表中查看
DateTimes 的值。这实际上是问题所在......看起来手表使用当前线程的文化。事实证明日期是正确的(这:12/16/2015 09:06:15无论如何都不是有效的日期......永远不会太迟意识到......:D)。该错误后来出现在代码中。我将在下面发布答案。
标签: c# .net sql-server entity-framework invariantculture