#sql #sql-server #entity-framework #entity-framework-6 #entity-framework-migrations
#sql #sql-сервер #entity-framework #entity-framework-6 #entity-framework-миграции
Вопрос:
Я использую подход EF6 model-first для разработки базы данных MS SQL, используя «Сгенерировать базу данных из модели …» в Visual Studio. Это генерирует sql-файл со всеми операторами drop и create.
На каком-то производительном этапе, когда база данных заполнена записями, я не хочу, чтобы все таблицы удалялись и создавались заново, их схема должна быть обновлена на месте без необходимости резервного копирования и восстановления всех записей. Вот где я обнаружил, что миграции EF были бы полезны.
Как я читал, миграции EF подходят только для подхода, основанного на коде, — так что это не то, что мне нужно.
Следующая остановка — инструмент сравнения схем в Visual Studio, из которого, я думаю, он может подойти. Но, к сожалению, у меня нет 2 баз данных для сравнения, я хочу сравнить существующую базу данных с новой моделью EF (или сгенерированным из нее SQL-файлом), чтобы получить SQL-файл для развертывания только изменений таблиц.
Возможно ли это вообще, и если да, то где я должен посмотреть?
Комментарии:
1. Тогда вообще не используйте EF для генерации схемы. Вы не можете сравнить схему базы данных с файлом , потому что файл может вносить любые изменения. Вы не будете знать, как будет выглядеть конечная база данных, пока не запустите сценарий до завершения.
2.
Generate database from model...
и миграции делают то же самое — генерируют исходный файл SQL для создания базы данных, а затем сценарии миграции для ее обновления. Вы спрашиваете о сравнении, а не о миграции. Это то, что делает инструмент сравнения схем в Visual Studio или SQL Server Database Tools. Он может сопоставлять базы данных, проекты баз данных или файлы dacpac друг с другом и генерировать / применять различия.3. Вы можете создавать
dacpac
файлы из проекта базы данных в Visual Studio или из действующей базы данных в SSMS
Ответ №1:
Для этого нет инструмента EF от Microsoft, не похожего на то, что они создали для проектов SQL и dacpac.
У нас была аналогичная потребность обеспечить, чтобы производственные схемы не отличались от ошибок во время выполнения, поэтому я написал одну: https://github.com/reckface/EntityFramework.Verify
Это рассматривается в этом вопросе проверки кода. Он не генерирует никакого SQL для исправления различий, но уведомляет вас о различиях.
Ответ №2:
попробуйте использовать Devart Entity Developer, он прост в использовании и позволяет сравнивать модели EF с базой данных. Я использую его более 3 лет и работает как шарм.