使用原始SQL更改数据库内容会使EntityFramework上下文不同步

时间:2019-05-19 23:53:08

标签: entity-framework-core rawsql

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

  

实体类型“ B”与   “ A”已被切断,但关系是   标记为“必需”或隐式必需,因为外键   不能为空。

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

1 个答案:

答案 0 :(得分:0)

您的假设正确。使用原始SQL更改数据库中的数据时,上下文不会意识到这些更改。来自documentation

  

请注意,使用   ExecuteSqlCommand对上下文不透明,直到实体被加载   或从数据库中重新加载。

您必须告诉EntityFramework从数据库更新上下文。可以这样做:

_db.Database.ExecuteSqlCommand($"DELETE FROM \"schema_name\".\"table_A\"");
_db.Entry(req).Reload();