EF 迁移:无法添加日期时间列

问题描述 投票:0回答:2

我正在使用 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 entity-framework-migrations
2个回答
8
投票

无法添加非空 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

0
投票

要使 DateTime 可为空,请首先执行添加迁移命令。然后将以下代码添加到

Up
方法中。

migrationBuilder.DropColumn(
    name: "LastUpdated",
    table: "MyTable");

migrationBuilder.AddColumn<DateTime>(
    name: "LastUpdated",
    table: "MyTable",
    type: "datetime2",
    nullable: true,
    defaultValue: null);
© www.soinside.com 2019 - 2024. All rights reserved.