0

我有一个表 A,它与另一个表 B 有外键关系。首先,我使用原始 SQL 删除 A 中的一个条目 (a)。后来我删除了表 B 中的一个条目 b,这是 a 指向的条目。当我这样做时,EntityFramework 失败并显示错误消息:

实体类型“B”和“A”之间的关联已被切断,但该关系要么被标记为“必需”,要么由于外键不可为空而被隐式要求。

我认为这是因为上下文与数据库不同步。我该如何解决?

4

1 回答 1

0

你的假设是对的。当您使用原始 SQL 更改数据库中的数据时,上下文不知道这些更改。从文档中:

请注意,在从数据库加载或重新加载实体之前,使用 ExecuteSqlCommand 对数据库中的数据所做的任何更改对上下文都是不透明的。

您必须告诉 EntityFramework 从数据库中更新上下文。这可以像这样完成(假设req这个 SQL 命令只删除了值):

_db.Database.ExecuteSqlCommand($"DELETE FROM \"schema_name\".\"table_A\"");
_db.Entry(req).Reload();
于 2019-05-19T23:53:07.663 回答