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
相关产品推荐
相关产品推荐

