如何从迁移脚本中删除默认约束

Har*_*ngi 7 c# entity-framework entity-framework-core

我有一个迁移脚本,我想从列中删除默认值,请帮助

 migrationBuilder.AddColumn<bool>(
              name: "IsExternalLink",
              table: "Link",
              nullable: false,
              defaultValue: 0);
Run Code Online (Sandbox Code Playgroud)

我想更改该列并删除默认值。

我尝试像这样改变列:

  migrationBuilder.AlterColumn<bool>(
                  name: "IsExternalLink",
                  table: "Link");
Run Code Online (Sandbox Code Playgroud)

但这并没有删除默认值

Fir*_*ald 10

如果要删除列的值DEFAULT,则必须定义oldDefaultValue.

// drop default
migrationBuilder.AlterColumn<bool>(
                name: "col",
                table: "my_table",
                oldDefaultValue: true, <-- THIS must be defined!
                defaultValue: null);

// Resulting Query: ALTER TABLE my_table ALTER COLUMN col DROP DEFAULT
Run Code Online (Sandbox Code Playgroud)

还要确保<type>, name(..) 也正确,因为如果您的书面陈述是垃圾,EfCore不会AlterColumn抱怨任何事情。


此外,如果您的表已包含行并且您想添加一个没有的新列DEFAULT,请执行以下操作:

// add column WITH default for existing rows
migrationBuilder.AddColumn<bool>(
                name: "col",
                table: "my_table",
                type: "boolean",
                nullable: false,
                defaultValue: true);

// drop default for new entries
migrationBuilder.AlterColumn<bool>(
                name: "col",
                table: "my_table",
                oldDefaultValue: true,
                defaultValue: null);
Run Code Online (Sandbox Code Playgroud)


Sha*_*hat 1

布尔值是值类型,您需要为它们指定一个值,除非您像 @StepUp 提到的那样创建可为空的布尔值。您可以在此处阅读有关值类型的更多信息

但是,如果您想要IsExternal不同的默认值然后为零,您可以在 POCO 类中设置它

public boolean IsExternalLink{ get; set; } = true; // To wahtever default value you choose
Run Code Online (Sandbox Code Playgroud)