这个问题已经在这里有一个答案:
- 一个DATETIME2数据类型为datetime数据类型的转换导致的外的范围? 4个回答
我做了一个小MVC4应用和我的本地SQL 2012服务器上进行数据库。 “进口”从我2012的数据把它搬到我廉价的共享主机生产与SQL 2008,一切运行良好。 做了一些修改,以非aspmembership表和SQL 2008和重新导入已删除的表。 出于某种原因,我得到这个错误
The conversion of a datetime2 data type to a smalldatetime data type resulted in an out-of-range value.\r\nThe statement has been terminated
如果我尝试注册一个帐号。 我试图chaning所有smalldatetimecolumns到DATETIME2列,但由于某种原因,即使没有smalldatetimes发生同样的错误?
有没有人有什么想法? 谢谢。
编辑:未来的人 - 我不清楚为什么这种固定的,但我在重新创建SQL表表示2008年而不是2012 SQL,然后感动他们。 工作得很好。
从错误的样子,你的数据库使用SMALLDATETIME为日期类型。 它的最小值为1900-JAN-01。 假设你的实体是类似下面
public class Game
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid GameId { get; set; }
[Required]
public DateTime GameTime { get; set; }
}
你GameTime值不是空的,所以当你不为她设置的任何值,它永远是DateTime.Min这是0000-JAN-01。 这超出SMALLDATETIME的范围,但它是在DATETIME2的范围内。 因此EF将尝试一个DATETIME2 SQL类型传递到SQL服务器。 因为您的数据库使用SMALLDATETIME,你会得到你的问题所示的错误。
要解决此问题,你有我能想到的下列选项:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(t => t.GameTime )
.HasColumnType("datetime2");
}
希望我已经正确理解你的问题,我的回答帮助。
文章来源: The conversion of a datetime2 data type to a smalldatetime data type resulted in an out-of-range value.\\r\\nThe statement has been terminated [duplicate]