我有一个5列的数据表,其中一行被数据填充,然后通过事务保存到数据库。

保存时,返回一个错误:

将datetime2数据类型转换为datetime数据类型会导致值超出范围

它暗示,正如阅读,我的数据表有一个类型的DateTime2和我的数据库一个DateTime;这是错误的。

date列设置为DateTime,如下所示:

新数据专栏(“myDate, Type.GetType”)

问题

是否可以在代码中解决这个问题,或者是否必须在数据库级别上更改某些内容?


当前回答

有时EF不知道它是在处理计算列还是触发器。按照设计,这些操作将在插入操作后的EF之外设置一个值。

修复方法是在EF的edmx中为StoreGeneratedPattern属性中的列指定Computed。

对我来说,这是当列有一个插入当前日期和时间的触发器时,参见下面的第三部分。


解决方法

在Visual Studio中打开模型浏览器页面,然后是模型,然后是实体类型->

选择实体和日期时间属性 选择StoreGeneratedPattern 设置为Computed


对于这种情况,其他答案是变通的,因为列的目的是在创建记录时指定一个时间/日期,而SQL的任务是执行一个触发器来添加正确的时间。例如下面的SQL触发器:

DEFAULT (GETDATE()) FOR [datecrecreated]。

其他回答

检查DB中的req格式。例如我的DB有默认值或Binding (((1)/(1))/(1900))

System.DateTime MyDate = new System.DateTime( 1900 ,1, 1);

在我的例子中,当为Nullable DateTime列显式分配NULL值时,然后尝试保存更改。这个错误将会弹出。

实体框架4使用datetime2数据类型,因此在数据库中对应的字段必须是datetime2的SQL Server 2008。

要解决这个问题,有两种方法。

要在实体框架4中使用datetime数据类型,你必须将edmx文件中的ProviderManifestToken切换为“2005”。 如果你设置相应的字段为允许空(它转换为NULLABLE),那么EF自动使用日期对象作为datetime。

有时它在开发机器上工作得很好,而在服务器上则不行。在我的例子中,我必须写:

<globalization uiCulture="es" culture="es-CO" />

在网络上。配置文件。

机器(服务器)中的时区是正确的(CO地区),但web应用程序不是。这个设置完成了,它再次工作正常。

当然,所有的约会都是有价值的。

:D

对我来说,这是因为约会时间是…

01/01/0001 00:00:00

在这种情况下,你想要分配null给你EF DateTime对象…以我的FirstYearRegistered代码为例

DateTime FirstYearRegistered = Convert.ToDateTime(Collection["FirstYearRegistered"]);
if (FirstYearRegistered != DateTime.MinValue)
{
    vehicleData.DateFirstReg = FirstYearRegistered;
}