Обновление БД Entity Framework, но контекст БД не показывает обновления - PullRequest
0 голосов
/ 01 октября 2018

У меня есть следующие настройки:

  • Веб-API .NetCore с использованием EF6 для IdentityServer4.
  • Проект модульного тестирования, который тестирует API.
  • БДконтекст извлекается из служб веб-хоста, поэтому должен быть одиночным и с той же ссылкой.

Со следующими шагами, ведущими к моей проблеме:

  1. Перед тестом я заполняю базу данных ресурсом и некоторыми утверждениями.
  2. В модульном тесте выполняется HTTP-запрос DELETE, в результате которого утверждение удаляется.Это видно в БД при вызове context.SaveChanges().
  3. Затем в модульном тесте утверждается, что заявка была удалена с использованием контекста БД.Это не удается из-за того, что контекст не отображается для обновления.

Проблема заключается в том, что контекст EF DB в модульном тесте, по-видимому, не видит удаления утверждения, которое сделал контекст DB API.

Вещи, которые я пробовал:

  • Использовал службы веб-хостинга для извлечения контекста БД, используя _host.Services.GetServices<ConfigurationDbContext>().First(service => service.GetType() == typeof(ConfigurationDbContext)).
    • Во время выполнения я проверил, что в службах существует только один ConfigurationDbContext.
  • Перезагрузка записи ресурса контекста модульного теста с использованием context.Entry(resource).Reload().
  • Повторно извлек контекст из веб-хоста.

Наблюдения:

  • Контекст модульного теста представляется актуальным перед удалением.
  • Удаление ресурса вместо одного из утверждений, похоже, отслеживается контекстом юнит-теста.
  • БД работает так, как ожидается, поэтому тестируемый код работает так, как ожидалось, это всего лишьКонтекст модульного теста, который не обновляется.
  • Контекст БД в API во время перехода обновляется, приводя к вызову context.SaveChanges() и после него.

Вопросы:

  • Кто-нибудь сталкивался с проблемой, когда контекст БД EF не обновляется?
  • Есть ли какой-то метод жесткого обновления, который мне не хватает, который заставил бы пересмотреть состояние контекстов с помощьюЧто касается ссылочной БД?
  • Существует ли какой-либо кэш, который заставляет контекст БД модульного теста считать его современным.

Большое спасибо заранее.

1 Ответ

0 голосов
/ 02 октября 2018

Спасибо Эрику Дж и DevilSuichiro за помощь в решении моей проблемы.Проблема заключалась в том, что я не должен был пытаться использовать тот же контекст БД.Получив новый контекст БД вместо того, чтобы пытаться повторно использовать тот же контекст БД, я смог проверить результаты своего теста.

Еще раз большое спасибо.

...