首页 > 解决方案 > 未触及外键值时,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 的情况下进行更新时,显然它失败了。我以为我要学习一些有关实体框架的知识,但我意识到我不太擅长浏览其他人的代码。

标签: c#sql

解决方案


我无法添加评论,所以我发布了一个答案希望它可以帮助你,

尝试检查它的属性assessmentInvitation以查看它是否包含正确的companyId值,如果您正在创建对象或由模型绑定器在请求中创建它可能已将其CompanyId设置为 null。


推荐阅读