Сравнение схемы EF6 между базой данных и sql-файлом?

#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 лет и работает как шарм.