Visual Studio 2017 Версия 15.8.4
.NET Core 2.1
Microsoft.EntityFrameworkCore 2.1.3
Согласно прочитанному руководству, заполнение данных - это метод, который я должен использовать для создания миграции, которая вставляет данные. EntityTypeBuilder.HasData - это метод, который используется для обеспечения того, чтобы миграция содержала код для вставки данных, а DbContext.OnModelCreating - время для этого.
Iу меня есть большая таблица, которую я заполняю из файла в DbContext.OnModelCreating.У меня также есть тестовый проект NUnit, который содержит интеграционный тест, который выполняет код, касающийся базы данных.Этот тест в настоящее время не проходит, потому что создание моего производного DbContext приводит к вызову OnModelCreating, который пытается открыть мой большой файл и импортировать его.Поскольку мой тестовый проект создает мой контекст выполнения, относительный путь к моему файлу данных отличается, поэтому он не может найти файл и выдает исключение.
Это не проблема.Я могу легко найти файл и вернуться, если он не существует.Но это исключение обращает мое внимание на тот факт, что OnModelCreating всегда будет вызываться при первом создании экземпляра моего производного класса DbContext в домене приложения, что означает, что вся эта таблица будет существовать в памяти, даже еслиЯ не запрашивал базу данных на предмет ее содержимого, что, кажется, лишает цели наличия базы данных.
Итак, я могу удалить код в OnModelCreating, который читает этот файл (и вдруг мои тесты проходят),но если я сделаю это, в следующий раз, когда я добавлю миграцию, код в Migration.Up уничтожит содержимое этой таблицы.Если только я не удалю вызов EntityTypeBuilder.HasData для этой таблицы, сгенерированный в ModelSnapshot, который выглядит как очень грязный хак, и который мне придется вручную отменить перед выполнением подобной серии грязных хаков в будущем в любое время, когда я захочу изменитьсодержимое этой таблицы.
Итак, вопрос в том, как предоставить начальные данные для миграции без автоматической загрузки этих данных в память при создании экземпляра DbContext и без ручного редактирования ModelSnapshot?