我有一个与另一个表B具有外键关系的表A。首先,我使用原始SQL删除了A中的一个条目(a)。稍后,我删除表B中的一个条目b,这是a指向的条目。当我这样做时,EntityFramework失败并显示错误消息:
实体类型“ B”与 “ A”已被切断,但关系是 标记为“必需”或隐式必需,因为外键 不能为空。
我认为这是因为上下文与数据库不同步。我该如何解决?
答案 0 :(得分:0)
您的假设正确。使用原始SQL更改数据库中的数据时,上下文不会意识到这些更改。来自documentation:
请注意,使用 ExecuteSqlCommand对上下文不透明,直到实体被加载 或从数据库中重新加载。
您必须告诉EntityFramework从数据库更新上下文。可以这样做:
_db.Database.ExecuteSqlCommand($"DELETE FROM \"schema_name\".\"table_A\"");
_db.Entry(req).Reload();