【问题标题】:How to remove default value from non nullable column in code first entity framework如何从代码优先实体框架中的不可空列中删除默认值
【发布时间】:2021-09-17 18:17:59
【问题描述】:

我已经创建了一个包含这样列的表

builder.Property(b => b.IndicatorPriority)
    .HasColumnName("IndicatorPriority") //Optional, Priority
    .HasColumnType("INT")
    .IsRequired();

我没有为此列指定任何默认值,但使用add-migration this 生成的迁移具有默认值

migrationBuilder.AddColumn<int>(
    name: "IndicatorPriority",
    schema: "Internal",
    table: "IndicatorStrategyMapping",
    type: "INT",
    nullable: false,
    defaultValue: 0);

如何先在代码中删除这个默认值绑定?

我尝试在列定义中添加这些行

.HasDefaultValue(null)

.HasDefaultValueSql(null)

但是这些行没有检测到迁移变化。

如何删除不可为空的列的默认值链接?

更新

正如在一条评论中所问的,为了澄清,我确实想要一个 non nullableno default value 来强制用户在插入记录时为该列提供值

【问题讨论】:

  • 我无法理解问题所在,您使用“IsRequired”属性并且还想删除默认值?有什么意义?尝试删除“IsRequired”属性。
  • @SergiyMatvienko - 我不明白为什么很难得到这个问题,是否有一些意想不到的要求有一个必需的列但没有默认值来强制用户在插入记录时提供值?
  • 我相信如果您的用户尝试在没有必填字段的情况下插入模型,他会收到一条验证错误消息。但在您的情况下,您运行迁移脚本,它会自动将值插入到必填字段。这就是为什么我无法理解问题是什么,一切都按预期工作。
  • @SergiyMatvienko - 哪些脚本将值插入到必填字段?我发布的脚本是模式创建脚本,而不是插入脚本。当我使用实体框架插入没有这个值的对象时,它不会给我任何错误,而是采用默认值。
  • 好的,那么目标是什么?如果你设置了'not null'和'no default value',那么应该有什么值呢?)

标签: c# ef-code-first default-value


【解决方案1】:

在执行命令database update之前,只需去掉defaultValue: 0部分即可

【讨论】:

  • 该文件是自动生成的。所以我不想手动更改它。我想以正确的方式进行操作,以便 EF 正确生成更改
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 2013-03-07
  • 1970-01-01
  • 2011-08-05
相关资源
最近更新 更多