我正在使用 ASP.Net 4 EF 4.3.1 Code First 迁移。
我有一个现有的模型类。我已经为其添加了一个属性:
public DateTime LastUpdated { get; set; }
当我运行 update-database -force -verbose 时,我得到:
ALTER TABLE [MyTable] ADD [LastUpdated] [日期时间] NOT NULL DEFAULT '0001-01-01T00:00:00.000'
System.Data.SqlClient.SqlException (0x80131904):varchar数据类型到日期时间数据的转换 类型导致值超出范围。
该声明已终止。
我猜测这与生成的 SQL 中使用的隐含默认值有关 - 它似乎在抱怨用于初始化事物的 varchar 数据丢失了。
无法添加非空 DateTime 列的问题的答案与获取为 DateTime 列指定的 2 个默认值的问题相同: EF 4.3.1 迁移异常 - AlterColumn defaultValueSql 为不同表创建相同的默认约束名称
也就是说,它已经被破坏了很长时间,您可以通过将其可为 null 进行迁移来解决它:
public DateTime? LastUpdated { get; set; }
PM> update-database
然后再次迁移,使其不为空,以到达您想要的位置:
public DateTime LastUpdated { get; set; }
PM> update-database
要使 DateTime 可为空,请首先执行添加迁移命令。然后将以下代码添加到
Up
方法中。
migrationBuilder.DropColumn(
name: "LastUpdated",
table: "MyTable");
migrationBuilder.AddColumn<DateTime>(
name: "LastUpdated",
table: "MyTable",
type: "datetime2",
nullable: true,
defaultValue: null);