实体框架中的日期时间文化问题

Posted

技术标签:

【中文标题】实体框架中的日期时间文化问题【英文标题】:DateTime culture issue in Entity Framework 【发布时间】:2017-12-04 12:29:22 【问题描述】:

我使用实体框架和代码优先方法将模型发送到数据库(即 SQL Server 2014)。

该模型有 2 个 DateTime 字段,其中一个是用户输入。我将它存储在 datetime? 变量中,然后 EF 完成其余工作以将模型存储在数据库中。

我的项目是多文化的,当我使用像 fa-ir 这样的另一种文化时,EF 会显示以下错误:

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。声明已终止。

它适用于具有波斯文化的 Windows 2014 及更新版本,但不适用于不支持波斯文化的先前版本。

有什么办法吗?

【问题讨论】:

您可以在插入 vlaue 之前将 threa 的文化更改为波斯语 .. @pranay-rana 是的,我将文化更改为 en-us,但问题没有得到解决! 好的,我在我的 ado.net 代码中尝试了这个技巧,它对我有用,所以我建议这样做 您必须选择一个日历(波斯或公历),最好选择一个时区(UTC),并将所有日期以该格式存储在您的数据库中。将它们全部存储在不同的时区甚至日历中都没有任何好处。 请向我们展示异常发生时正在执行的代码。请务必突出显示引发异常的行 【参考方案1】:

SQL datetime 数据类型仅支持从 1753-01-01 到 9999-12-31 的日期。

但是波斯历的当前年份是 1396。

所以你必须将 SQL 列更改为支持 0001-01-01 到 9999-12-31 的 datetime2 数据类型。

【讨论】:

我在此范围内选择一个日期,并将其存储在 datetime 变量中。我想以日期时间格式将日期存储在数据库中,因为结果在此范围内。这不是导致此错误的原因,此外我不喜欢变通方法和临时解决方案!

以上是关于实体框架中的日期时间文化问题的主要内容,如果未能解决你的问题,请参考以下文章

比较实体框架中的日期时间

按日期部分比较实体框架中的SQL日期时间

实体框架 - SQL Server 2005 - IIS 服务器日期时间问题

Javascript中的文化特定日期时间

在实体框架代码中,日期时间总是更改为时间戳

如何在条件下使用实体框架组日期而不是时间日期和总和