实体框架更改列类型

Posted

技术标签:

【中文标题】实体框架更改列类型【英文标题】:Entity Framework alter column type 【发布时间】:2012-06-17 22:01:14 【问题描述】:

我使用这个属性在我的数据库中创建了一个列:

public int EnteredDateTime  get; set; 

但是,当我更新属性时,该列已正确创建:

public DateTime EnteredDateTime  get; set; 

我收到以下错误:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

我做错了什么?

【问题讨论】:

您是否使用 CodeFirst 生成数据库? 在哪里你得到错误? 是的,我已经使用了Code First,如何在属性中设置默认值? 【参考方案1】:

如果您忘记设置属性,就会发生这种情况。

DateTime 的默认值是 1/1/0001,它超出了 SQL Server 日期的范围。

【讨论】:

如何在属性中设置默认值? @Gaurav:在构造函数中设置。【参考方案2】:

我想您已经使用 CodeFirst 来生成数据库。您目前不能只更改代码并自动更改数据库(这在 EF 5 中可以通过迁移实现)。您必须手动更改数据库并将列的类型设置为 DateTime。或者您从头开始删除并重新创建数据库(如果您不需要已存储在其中的数据)。

【讨论】:

我已经启用了迁移,它适用于 DateTime 以外的其他类型更改。 你检查数据库中列的数据类型是否正确? EF 5 仍处于测试阶段,可能存在错误... 好吧,DB 有 int,我改成 DateTime 但在 DB 中没有改变。 然后手动修改列类型,可能是EF 5 beta的bug。

以上是关于实体框架更改列类型的主要内容,如果未能解决你的问题,请参考以下文章

如何更改实体中的数据库列类型

实体框架更改 Id 类型

Base64 字符串的实体框架列类型

存储过程中返回的地理列未显示在实体框架自动生成的复杂类型中

即时更改数据库列类型

使用实体框架/休眠与 sql2008 地理数据类型