c# - 未触及外键值时,UPDATE 语句与 FOREIGN KEY 约束冲突
问题描述
我正在通过 C# 使用 SQL 来更新表中的一行,如下所示
context.AssessmentInvitation.Attach(assessmentInvitation);
context.Entry(assessmentInvitation).State = EntityState.Modified;
await context.SaveChangesAsync();
在某些情况下执行此操作时,SaveChangesAsync
由于外键约束,我会遇到异常。作为被更新对象CompanyId
的一部分,外键约束与 a有关。assessmentInvitation
此约束设置为更新时级联,这似乎是此问题的常见解决方案。这并没有为我解决问题。
有趣的是,导致这个问题的更新根本没有触及这个外键。它只是更新一个 BIT 以将其设置为 true。没有其他值被修改。BIT 不以任何方式与任何其他表相关,它不是任何类型的键的一部分。
如果它保持不变,为什么这个外键约束与更新完全相关?我该如何解决这个问题?
编辑:问题比我想象的要简单得多。它正在使用未获取整个 AssessmentInvitation 对象的存储过程。实际上,它完全排除了 CompanyId。因此,当我尝试在没有现有 CompanyId 的情况下进行更新时,显然它失败了。我以为我要学习一些有关实体框架的知识,但我意识到我不太擅长浏览其他人的代码。
解决方案
我无法添加评论,所以我发布了一个答案希望它可以帮助你,
尝试检查它的属性assessmentInvitation
以查看它是否包含正确的companyId
值,如果您正在创建对象或由模型绑定器在请求中创建它可能已将其CompanyId
设置为 null。
推荐阅读
- angular - 使用共享点中的角度更新 CheckBox 中的值
- image-processing - 将灰度HImage(MVtec Halcon库)转换为c#位图
- apache-camel - 从 Talend cSetHeader 中的 XPath 表达式获取字符串结果
- python - 用户警告:覆盖先前设置的目标。warnings.warn("覆盖之前设定的目标。")
- raku - 数组通过`for`循环时保持数组
- vba - VBA office 2016 windows7/10 区别:设置 IXMLDOMNodeList = DOMDocument60.childNodes
- sql - Postgresql 多个左连接
- tfs - TFS - 上传 lnk 文件以测试附件
- azure - 使用 ubuntu 在虚拟机中设置 wordpress
- android - 接收推送时无法实例化接收器 com.onesignal.GcmBroadcastReceiver