实体框架迁移 - 更改属性DataType

时间:2013-01-24 10:45:08

标签: sql-server entity-framework asp.net-mvc-4 entity-framework-5 sqlexception

我正在开发一个带有Entity Framework 5.0的ASP.Net MVC 4 Web应用程序,用于数据持久性。我在开发过程中使用Code First和Automatic Migrations。

由于我必须使用现有数据库,因此我使用这个有用的教程来创建我的域类 Code First to an Existing Database

我的模型中有一个名为 tblcourseapplicant 的类,它有一个名为 ManagerTitle 的String属性。我想将此数据类型更改为 Int ,为此我更改了POCO类中的属性

来自

public string ManagerTitle { get; set; }

public int ManagerTitle { get; set; }

然后我使用Fluent API更改了相关Mapping类(tblcourseapplicantMap)中的property属性

this.Property(t => t.ManagerTitle).HasMaxLength(5);

this.Property(t => t.ManagerTitle).IsRequired();

我还更新了此特定列的数据库中的所有数据,以便将所有值转换为整数。

我运行了我的项目,自动迁移尝试为我执行此更新,但它返回时出现以下错误

  

无法将值NULL插入“ManagerTitle”列表中   'tblcourseapplicant';列不允许空值。更新失败。该   声明已被终止。

我无法理解为什么会这样,因为我的数据库表中没有ManagerTitle为NULL的记录,所有记录都被赋予了整数值。

非常感谢任何帮助。

感谢。

更新

我仍然在努力寻找解决这个问题的方法。我注意到返回的错误是 SqlException 。有没有人有任何想法吗?我不明白这里的问题是什么,我的理解是Code First Automatic Migrations应该能够处理这个简单的属性数据类型更改。

帮助!

2 个答案:

答案 0 :(得分:3)

该列是否已在数据库中定义为可为空?

您也可以尝试在POCO

中使其可以为空
public int? ManagerTitle { get; set; }

答案 1 :(得分:1)

使用非自动迁移执行类似更新时,更新代码只会删除旧列并创建一个新列,而不会在重命名(或重新键入)属性之间进行任何数据迁移。

我怀疑你的问题可能就是这种情况。

相关问题