这很简短:我错误地设置了属性string
,而应该将其设置为int
。没有限制,因为此int
是可选的。即使我可以将int设为可为空,但我宁愿将其默认值为零。
然后,当我尝试运行迁移时:
无法将值NULL插入表的“ Edad”列中 'EduPlaTools.dbo.Profesor';列不允许为空。更新失败。 该声明已终止。
有道理。它正在做的是更新字段,并且由于许多字段都为“ NULL”,因此将其插入。有没有一种方法可以将这些NULL自动映射为零?还是我需要执行一条SQL语句?
这是migrationBuilder代码:
migrationBuilder.AlterColumn<int>(
name: "Edad",
table: "Profesor",
nullable: false,
oldClrType: typeof(string),
oldNullable: true);
答案 0 :(得分:1)
如果您尝试更改列的类型并且表中已经存在记录,则这些记录需要为每个新列指定一些值。如果尚未为该列指定默认值,则数据库将尝试使用NULL,因为该列不允许为null,否则将失败。
答案 1 :(得分:1)
哦,不。我要道歉太傻了,因为没有意识到这一点,所以Entity Framework显然是在其他具有相似属性Profesor
的表上布置支架,而实际上Estudiante
需要更改。
migrationBuilder.AlterColumn<int>(
name: "Edad",
table: "Estudiante",
nullable: false,
oldClrType: typeof(string),
oldNullable: true,
defaultValue: 0);
现在一切正常!谢谢大家!