Я пытаюсь перенести проект с 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, а также изменил некоторые типы столбцов.
Я что-то упускаю?
Я также пытался запустить SureCreated перед миграцией, но безуспешно.
Думаю, важно сказать, что база данных уже создана.
Хорошо, в этом случае SureCreated неэффективен. Используете ли вы миграции? Если вы этого не сделаете, вам нужно вызвать SureDeleted, а затем SureCreated (что удаляет базу данных). Если вы не хотите, чтобы база данных была удалена, вы должны использовать миграции. Запустите команду Add-migration yourMessage. Подробнее читайте здесь:learn.microsoft.com/en-us/ef/core/managing-schemas/migrations/
После добавления миграции с помощью команды Add-migration функция Database.Migrate() будет действовать так, как если бы вы выполнили команду update-database. который просто применяет созданную миграцию к базе данных.
Я также пытался сделать это. Он создал первые миграции со всеми командами создания таблиц. Когда я попытался запустить базу данных обновлений, она пожаловалась, что таблицы уже созданы.
Да, это ожидаемое поведение. Это потому, что ваша база данных не была создана с использованием миграций. Вот мое предложение: если вы используете систему управления версиями, отмените (или спрячьте) новые изменения, внесенные вами в базу данных. Чтобы он соответствовал текущей схеме. Затем добавьте миграцию для создания всей базы данных. Наконец, снова добавьте свои новые изменения и добавьте новую миграцию. После этого вы сможете применить изменения.
Я сделал это, но когда я попытался запустить базу данных обновлений, она пожаловалась, что таблицы уже созданы.
Моя ошибка. Есть дополнительный шаг, который необходимо сделать. Вы должны прокомментировать код Up в первой миграции. Затем выполните обновление базы данных и, наконец, добавьте и примените новые изменения. Это связано с тем, что EF отслеживает примененные миграции в базе данных с помощью таблиц миграции. Проверьте это (но это для EF6) learn.microsoft.com/en-us/ef/ef6/modeling/code-first/migrations/…
Мне нужно будет оставить верхнюю часть комментария навсегда? постараюсь сделать это как можно скорее
Нет. Вы должны раскомментировать это позже. Комментирование делается только потому, что используемая вами база данных не была создана миграциями. Когда вы комментируете его, вы в основном говорите ядру EF, что миграция уже применена. Вы должны раскомментировать его, чтобы будущие базы данных создавались правильно с миграциями.
Также вам не понадобится context.Database.EnsureCreated(); больше. Потому что вы используете миграции. Используйте этот метод только для тестирования баз данных, данные внутри которых вас не интересуют.
Единственный способ заставить это работать: Scaffold db. Прокомментируйте исходный код вверх. Внесите изменения, запустите обновление базы данных. database.Migrate() не вносит никаких изменений





попробуйте сгенерировать свои модели и конфигурацию из существующей базы данных, а затем применить модификации/изменения в ваших моделях.
https://www.entityframeworktutorial.net/efcore/create-model-for-existing-database-in-ef-core.aspx
Я сделал это с помощью плагина JetBrains.Rider EntityFramework.Core.
Я приказываю решить проблему, я выполнил следующие шаги
Новая миграция должна работать должным образом;
Таким образом, вам не нужно комментировать верхнюю часть кода;
context.Database.EnsureCreated() должен создать базу данных. Вы проверили базу данных? Метод Migrate() неэффективен, если вы не выполните команду add-migration. Узнать больше