我正在开发一个带有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应该能够处理这个简单的属性数据类型更改。
帮助!
答案 0 :(得分:3)
该列是否已在数据库中定义为可为空?
您也可以尝试在POCO
中使其可以为空public int? ManagerTitle { get; set; }
答案 1 :(得分:1)
使用非自动迁移执行类似更新时,更新代码只会删除旧列并创建一个新列,而不会在重命名(或重新键入)属性之间进行任何数据迁移。
我怀疑你的问题可能就是这种情况。