Sql server 2008 实体框架中的datetime2和ProviderManifestToken

Sql server 2008 实体框架中的datetime2和ProviderManifestToken,sql-server-2008,asp.net-mvc-2,entity-framework-4,Sql Server 2008,Asp.net Mvc 2,Entity Framework 4,我有一个使用实体框架和SQLServer2008数据库的MVC应用程序。我使用EF向导生成数据模型 我有一个SQL Server表,其中有一个标准的DateTime列。EF模型使用的是System.DateTime 但是,当我尝试从应用程序向该表中插入一条新记录,但没有为此DateTime列指定值时,会出现以下错误: 将datetime2数据类型转换为datetime数据类型导致值超出范围 我在谷歌上搜索了一下,发现人们正在编辑edmx并更改ProviderManifestToken。很明显,这

我有一个使用实体框架和SQLServer2008数据库的MVC应用程序。我使用EF向导生成数据模型

我有一个SQL Server表,其中有一个标准的
DateTime
列。EF模型使用的是
System.DateTime

但是,当我尝试从应用程序向该表中插入一条新记录,但没有为此DateTime列指定值时,会出现以下错误:

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


我在谷歌上搜索了一下,发现人们正在编辑edmx并更改
ProviderManifestToken
。很明显,这将被覆盖,那么有没有更持久的修复方法或方法来修复此问题?

问题是,正如您所说,您没有为实体上的DateTime属性设置任何值,这会导致它默认为“0001-01-01”,这肯定超出SQL Server上列的范围。datetime类型的日期范围是1753年1月1日到9999年12月31日。


要解决此问题,您必须在将属性发送到SQL Server之前为该属性指定一个范围内的值,或者更改日期范围为0001-01-01到9999-12-31的DB列类型。

如果我没有显式设置实体属性的值,EF是否应该插入null?否,它将在.Net中设置为默认值(DateTime)。请注意DateTime是一种值类型,不能为Null,但是DateTime?可以EF中有许多方法可以根据其使用情况自动填充此属性(基本上是任何实体的属性)。