【问题标题】:EF Migrations: Can't add DateTime columnEF 迁移:无法添加 DateTime 列
【发布时间】:2012-06-05 22:43:37
【问题描述】:

我正在使用 ASP.Net 4 EF 4.3.1 代码优先迁移。

我有一个现有的模型类。我已经为其添加了一个属性:

public DateTime LastUpdated { get; set; }

当我运行 update-database -force -verbose 时,我得到:

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

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

【问题讨论】:

  • 这不是我的默认设置 - EF Code First Migrations 会为任何新的非空 DateTime 属性/列自动生成此 SQL。
  • SQL DateTime 数据类型的最小值为 1753 年 1 月 1 日。.NET 日期时间的最小值为 0001 年 1 月 1 日。不幸的是,冲突很常见。

标签: datetime entity-framework-migrations


【解决方案1】:

无法添加非空 DateTime 列的问题的答案与获取为 DateTime 列指定的 2 个默认值的问题相同: 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

【讨论】:

  • 在我的情况下,也有必要在 fluent api 中删除 .IsRequired() 才能将其放回原处。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 2017-05-30
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多