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

EF6 SaveChanges报错fk_ref字段为NULL的问题求助

EF 保存数据时 fk_ref 字段始终为 NULL 的问题

问题背景

我使用EF开发已有一段时间,此次遵循过往常用模式开发却遇到问题,具体情况如下:

SQL表定义

Table LogTable
   Columns
      LogID (int, Identity)
      fk_ref (int, not null)
      action (nvarchar(60))
      notes  (nvarchar(200))

业务代码(为便于理解修改了名称)

using(myEntity _me = new myEntity)
{
    LogTable _lt = new LogTable();
    _lt.fk_ref = 10;
    _lt.action = "Some action";
    _lt.notes = "even more text";
    _me.LogTable.Add(_lt);
    _me.SaveChanges();
}

调用SaveChanges()时报错,提示字段fk_ref为NULL。查看edmx和ModelBrowser,所有字段均已正确映射;调试时查看_me.LogTable的SELECT语句,发现该语句缺少报错的fk_ref字段。

注意:我已尝试删除并重新添加表,甚至执行删除、清理、重建、重新添加的操作,但问题依旧。

后续排查更新

更新1

由于是新功能,我暂时取消了关联表的外键约束,并移除了fk_ref的非空限制,执行代码后成功写入记录,但fk_ref字段值为NULL。

更新2

提供对应简化定义的实体类代码:
修改后的代码(取消非空限制后):

public LogTable()
{
    this.fk_ref = 0;
}

public int LogID { get; set; }
public Nullable<int> fk_ref { get; set; }
public string action { get; set; }
public string notes { get; set; }

更新1前的代码(原非空约束下):

public LogTable()
{
}

public int LogID { get; set; }
public int fk_ref { get; set; }
public string action { get; set; }
public string notes { get; set; }

更新3

执行上述代码保存记录后,查看数据库发现fk_ref为NULL;通过LogID将记录拉取到应用中,手动设置fk_ref为999并调用SaveChanges(),再次查看数据库该字段仍为NULL,相关代码如下:

//... 前置代码 ...
// 假设4是刚插入记录的LogID
LogTable _new = _me.LogTable.Where(p => p.LogID == 4).FirstOrDefault();
// 调试时查看_new,设置后fk_ref值是999
_new.fk_ref = 999;
_me.SaveChanges();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:15:42