Я переношу приложение PHP/Illuminate в ядро Core/EF для ASP.NET. Часть его состоит из процесса установки типа Wordpress, который запрашивает учетные данные для базы данных, а затем создает необходимые таблицы для работы приложения. По сути, я хочу запустить некоторую миграцию во время выполнения, как я могу, с помощью построителя схем Illuminate.Миграция во время выполнения с Entity Framework Core
Я нашел ссылку для Microsoft.EntityFrameworkCore.Migrations namespace, которая кажется связанной с тем, что я хочу сделать, но я не могу найти какую-либо документацию или рекомендации по ее использованию. Я предполагаю, что я мог бы писать необработанные SQL-запросы и выполнять их, но я бы скорее работал с хорошим, строго типизированным API, если это было возможно.
Возможно ли это с помощью EF Core, и есть ли у кого-нибудь какие-либо предложения о том, как это сделать? В настоящее время я использую Pomelo MySQL provider, если это имеет значение.
Спасибо за ваш ответ. Для этого решения требуется, чтобы таблица __EFMigrationsHistory существовала до запуска Migrate(), что не может быть гарантировано в моем случае использования (предположим, что существующая база данных без таблиц). Есть ли способ обойти это? Например, можно ли вручную запустить код сборки схемы? Я должен отметить, что для этого проекта не требуется сохранение истории миграции и дальнейших миграций. – James
Я не использовал его лично, но метод EnsureCreated может делать то, что вы ищете. Похоже, он полностью обходит систему миграции. https://docs.microsoft.com/en-us/ef/core/api/microsoft.entityframeworkcore.infrastructure.databasefacade#Microsoft_EntityFrameworkCore_Infrastructure_DatabaseFacade_EnsureCreated –
Простое примечание: 'Database.Migrate()' не требует, чтобы таблица предыстории существовала раньше, чем он создаст его для вас в первый раз. Он используется для отслеживания миграций, применяемых в случае, если вы хотите внести изменения в базу данных в будущем. Если вы просто хотите, чтобы схема и таблицы были в первый раз и никогда не обновлялись, вы можете использовать 'context.Database.EnsureCreated()', как предлагал @BradMelanson. – Smit