如何在Entity Framework 2 Core中将null字符串更改为non-null int?

时间:2018-12-05 19:56:30

标签: c# sql entity-framework asp.net-core entity-framework-core

这很简短:我错误地设置了属性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);

2 个答案:

答案 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);

现在一切正常!谢谢大家!