我正在使用 Entity Framework 5.0 开发 ASP.Net MVC 4 Web 应用程序以实现数据持久性。我在开发过程中使用代码优先和自动迁移。
由于我必须使用现有数据库,因此我使用了这个有用的教程来创建我的域类
Code First to an Existing Database
我的模型中有一个名为 tblcourseapplicant 的类,它有一个名为 ManagerTitle 的字符串属性。我想将此数据类型更改为 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();
我还更新了数据库中此特定列的所有数据,以便所有值都转换为整数。
我运行了我的项目,自动迁移尝试为我执行此更新,但返回时出现以下错误
Cannot insert the value NULL into column 'ManagerTitle', table 'tblcourseapplicant'; column does not allow nulls. UPDATE fails. The statement has been terminated.
我不明白为什么会这样,因为我的数据库表中没有 ManagerTitle 为 NULL 的记录,它们都被分配了一个整数值。
任何帮助将不胜感激。
谢谢。
更新
各位,我仍在努力寻找解决这个问题的方法。我注意到返回的错误是 SqlException。请问有人有什么想法吗?我不明白这里的问题是什么,我的理解是 Code First 自动迁移应该能够处理这个简单的属性数据类型更改。
救命!
最佳答案
数据库中该列是否已定义为可为空?
您还可以尝试在 POCO 中将其设置为可为空
public int? ManagerTitle { get; set; }
关于sql-server - Entity Framework 迁移 - 更改属性数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14499423/