2012-06-05 70 views
3

我正在使用ASP.Net 4 EF 4.3.1 Code First Migrations。EF迁移:无法添加DateTime列

我有一个现有的模型类。我添加了一个属性,它:

public DateTime LastUpdated { get; set; } 

当我运行更新数据库-force -verbose我得到:

ALTER TABLE [MyTable的] ADD [LASTUPDATED] [日期时间] NOT NULL DEFAULT '0001-01-01T00:00:00.000'
System.Data.SqlClient.SqlException (0x80131904):将varchar数据类型转换为日期时间数据 类型导致超出范围值。
该声明已终止。

我想猜测这与在生成的SQL中使用的隐含缺省值有关 - 它似乎在抱怨用于初始化事物的varchar是数据丢失。

+0

这不是我的默认设置--EF Code First Migrations会自动为任何新的非空DateTime属性/列生成此SQL。 –

+0

SQL DateTime数据类型的最小值为1月1753年。.NET日期时间的最小值为1 1 0001。不幸的是,冲突很常见。 –

回答

6

这个问题的答案不能够添加一个非空DateTime列的这个问题是与获取2个默认值的一个DateTime列指定的问题: EF 4.3.1 Migration Exception - AlterColumn defaultValueSql creates same default constraint name for different tables

也就是说,它被打破很长一段时间,你可以用它为空的迁移解决方法是:

public DateTime? LastUpdated { get; set; } 

PM> update-database 

然后再次迁移它不是空来得到你想要的结果:

public DateTime LastUpdated { get; set; } 

PM> update-database