2

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

由于我必须使用现有数据库,因此我使用这个有用的教程将我的域类
代码首先创建到现有数据库

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

public string ManagerTitle { get; set; }

public int ManagerTitle { get; set; }

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

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

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

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

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

无法将值 NULL 插入列“ManagerTitle”、表“tblcourseapplicant”;列不允许空值。更新失败。该语句已终止。

我不明白为什么会这样,因为我的数据库表中没有 ManagerTitle 为 NULL 的记录,它们都被分配了一个整数值。

任何帮助将不胜感激。

谢谢。

更新

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

帮助!

4

2 回答 2

3

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

您也可以尝试在 POCO 中使其为空

public int? ManagerTitle { get; set; }
于 2013-01-24T12:05:38.083 回答
1

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

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

于 2013-01-24T20:09:27.403 回答