Изменение содержимого базы данных с помощью необработанного SQL выводит контекст EntityFramework из синхронизации - PullRequest
0 голосов
/ 20 мая 2019

У меня есть таблица A, которая имеет отношение внешнего ключа к другой таблице B. Сначала я удаляю запись (a) в A, используя сырой SQL.Позже я удаляю запись в таблице B, b, которая была той, на которую указывал a.Когда я это делаю, EntityFramework завершается ошибкой с сообщением об ошибке:

Связь между типами сущностей 'B' и 'A' разорвана, но связь либо помечена как 'Обязательная', либо неявно обязательнапотому что внешний ключ не обнуляется.

Я предполагаю, что это потому, что контекст не синхронизирован с базой данных.Как мне это исправить?

1 Ответ

0 голосов
/ 20 мая 2019

Вы правы в своем предположении.Когда вы изменяете данные в базе данных, используя сырой SQL, контекст не знает об этих изменениях.Из документации :

Обратите внимание, что любые изменения, внесенные в данные в базе данных с помощью ExecuteSqlCommand, непрозрачны для контекста, пока объекты не будут загружены или перезагружены из базы данных.

Вы должны указать EntityFramework обновить контекст из базы данных.Это можно сделать следующим образом (при условии, что эта команда SQL удаляет только значение req):

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