Microsoft.EntityFrameworkCore.SqlServer — база данных не обновляется в context.Database.Migrate();

Я пытаюсь перенести проект с Dapper на Microsoft.EntityFrameworkCore.SqlServer.

Я создал объекты и их соответствующие сопоставления (конфигурации).

Также я запускаю свой метод ConfigureServices внутри запуска.

using var scope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope();
using var context = scope.ServiceProvider.GetRequiredService<SpannerContext>();
context.Database.EnsureCreated();
context.Database.Migrate();

Но ничего не происходит;

Журналы показывают:

info: Microsoft.EntityFrameworkCore.Migrations[20405]
      No migrations were applied. The database is already up to date.

Но я добавил несколько новых DbSet, а также изменил некоторые типы столбцов.

Я что-то упускаю?

context.Database.EnsureCreated() должен создать базу данных. Вы проверили базу данных? Метод Migrate() неэффективен, если вы не выполните команду add-migration. Узнать больше

yousif 07.12.2022 22:29

Я также пытался запустить SureCreated перед миграцией, но безуспешно.

Vinicius Andrade 07.12.2022 22:31

Думаю, важно сказать, что база данных уже создана.

Vinicius Andrade 07.12.2022 22:34

Хорошо, в этом случае SureCreated неэффективен. Используете ли вы миграции? Если вы этого не сделаете, вам нужно вызвать SureDeleted, а затем SureCreated (что удаляет базу данных). Если вы не хотите, чтобы база данных была удалена, вы должны использовать миграции. Запустите команду Add-migration yourMessage. Подробнее читайте здесь:learn.microsoft.com/en-us/ef/core/managing-schemas/migration‌​s/

yousif 07.12.2022 22:38

После добавления миграции с помощью команды Add-migration функция Database.Migrate() будет действовать так, как если бы вы выполнили команду update-database. который просто применяет созданную миграцию к базе данных.

yousif 07.12.2022 22:40

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

Vinicius Andrade 07.12.2022 22:41

Да, это ожидаемое поведение. Это потому, что ваша база данных не была создана с использованием миграций. Вот мое предложение: если вы используете систему управления версиями, отмените (или спрячьте) новые изменения, внесенные вами в базу данных. Чтобы он соответствовал текущей схеме. Затем добавьте миграцию для создания всей базы данных. Наконец, снова добавьте свои новые изменения и добавьте новую миграцию. После этого вы сможете применить изменения.

yousif 07.12.2022 22:47

Я сделал это, но когда я попытался запустить базу данных обновлений, она пожаловалась, что таблицы уже созданы.

Vinicius Andrade 07.12.2022 22:59

Моя ошибка. Есть дополнительный шаг, который необходимо сделать. Вы должны прокомментировать код Up в первой миграции. Затем выполните обновление базы данных и, наконец, добавьте и примените новые изменения. Это связано с тем, что EF отслеживает примененные миграции в базе данных с помощью таблиц миграции. Проверьте это (но это для EF6) learn.microsoft.com/en-us/ef/ef6/modeling/code-first/migrati‌​ons/…

yousif 08.12.2022 06:41

Мне нужно будет оставить верхнюю часть комментария навсегда? постараюсь сделать это как можно скорее

Vinicius Andrade 08.12.2022 06:52

Нет. Вы должны раскомментировать это позже. Комментирование делается только потому, что используемая вами база данных не была создана миграциями. Когда вы комментируете его, вы в основном говорите ядру EF, что миграция уже применена. Вы должны раскомментировать его, чтобы будущие базы данных создавались правильно с миграциями.

yousif 08.12.2022 07:47

Также вам не понадобится context.Database.EnsureCreated(); больше. Потому что вы используете миграции. Используйте этот метод только для тестирования баз данных, данные внутри которых вас не интересуют.

yousif 08.12.2022 07:48

Единственный способ заставить это работать: Scaffold db. Прокомментируйте исходный код вверх. Внесите изменения, запустите обновление базы данных. database.Migrate() не вносит никаких изменений

Vinicius Andrade 19.12.2022 13:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
13
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

попробуйте сгенерировать свои модели и конфигурацию из существующей базы данных, а затем применить модификации/изменения в ваших моделях.

https://www.entityframeworktutorial.net/efcore/create-model-for-existing-database-in-ef-core.aspx

Я сделал это с помощью плагина JetBrains.Rider EntityFramework.Core.

Vinicius Andrade 07.12.2022 22:52
Ответ принят как подходящий

Я приказываю решить проблему, я выполнил следующие шаги

  1. Сформировать базу данных;
  2. Добавить миграцию;
  3. Запустите код в первый раз, чтобы убедиться, что таблица миграций инфраструктуры сущностей создана;
  4. Перейдите в таблицу структуры сущностей и добавьте имя создания миграции;
  5. Измените базу данных с новыми таблицами/столбцами и т. д.;
  6. Добавить новую миграцию;

Новая миграция должна работать должным образом;

Таким образом, вам не нужно комментировать верхнюю часть кода;

Другие вопросы по теме