You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core 5使用HasDefaultValue FluentAPI设置默认值插入报NULL错误如何解决

EF Core 5 字段默认值不生效问题解决方法

核心原因

你的配置缺少关键的生成值标记,同时可能存在配置与实体定义不匹配、数据库结构未更新的问题:

  • EF Core 仅配置HasDefaultValue不足以触发数据库默认值逻辑,需要额外告知EF Core该字段的值在插入时由数据库生成
  • 若配置了IsRequired()但实体属性定义为可空的string?,会导致EF Core直接传入NULL值触发数据库非空约束
  • 修改FluentAPI配置后未执行迁移更新数据库,导致数据库表字段未添加默认值约束

解决方案

1. 修正FluentAPI配置

给FirstName字段添加ValueGeneratedOnAdd()配置,完整配置如下:

entity.Property(e => e.FirstName)
    .IsRequired() // 若字段允许为null可删除该行
    .HasDefaultValue("john")
    .ValueGeneratedOnAdd() // 关键配置:插入时由数据库生成值
    .HasMaxLength(100)
    .IsUnicode(false);

2. 统一实体定义与配置规则

如果保留IsRequired()配置,将实体的FirstName属性修改为非空类型,避免CLR默认值null与非空约束冲突:

// 修改前
public string? FirstName { get; set; }
// 修改后
public string FirstName { get; set; } = string.Empty;

3. 更新数据库结构

在包管理控制台执行迁移命令,将默认值约束同步到数据库:

Add-Migration AddFirstNameDefaultValue
Update-Database

验证逻辑

修改完成后运行测试代码,EF Core生成的INSERT语句会自动忽略FirstName字段,由数据库填充默认值john,不会再触发NULL插入报错。

内容的提问来源于stack exchange,提问作者JohnG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:54:03