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

.NET 8 EF Core DbContext.Add未插入非键列报空值错误,求排查

问题排查与解决方案

核心问题

你的DbPageCompleted实体类中,lastUpdateTime是字段而非属性,缺少get; set;访问器:

[Column("last_update_time")]
[Required]
public DateTime? lastUpdateTime; // 这是字段,不是属性

EF Core默认只会映射带有get和set访问器的属性,无法识别普通字段。因此即使你给字段赋值,EF Core也不会将这个值包含在生成的INSERT语句中,数据库收到的该列值为NULL,触发非空约束报错。

修复步骤

将lastUpdateTime修改为属性,添加get; set;访问器:

[Column("last_update_time")]
[Required]
public DateTime? lastUpdateTime { get; set; }

额外优化建议

  • 避免静态DbContext实例:你在ExptContext中定义了静态的dbContext字段,测试场景下容易导致上下文状态混乱(比如重复插入、状态残留)。建议在测试方法中创建新的上下文实例并使用using确保资源释放:
    [Test]
    public void Expt() {
        using var dbContext = new ExptContext();
        dbContext.pageCompletions.Add(dbPageCompleted);
        dbContext.SaveChanges();
    }
    
  • 统一数据注解与类型:[Required]注解标记字段非空,但结合可空的DateTime?类型存在矛盾。如果数据库列确实不允许NULL,建议将类型改为非空的DateTime:
    [Column("last_update_time")]
    [Required]
    public DateTime lastUpdateTime { get; set; }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:45:00