tl; dr База данных Проекты многофункциональны, но в первую очередь база данных. Миграции выполняются сначала в коде, но имеют очень ограниченный встроенный набор функций базы данных.
Для многих людей неуместно сравнивать проекты баз данных и миграции. Они представляют два разных режима работы с Entity Framework. Миграции - это сначала код, DP - сначала база данных. Конечно, вы можете использовать миграции для управления схемой базы данных и, кроме того, поддерживать синхронизацию DP с созданной базой данных для удовлетворения требований администраторов баз данных (как следует из ссылки). Но оба ведут свою собственную отдельную жизнь, и единого Истинного Истины нет .
Так что сравнение их полезно, если вы еще не уверены, какой режим работы вы выберете.
Для меня наиболее важным отличием является то, что DP будет охватывать все объекты базы данных и обнаруживать все изменения между ними при сравнении баз данных. Миграции обнаруживают только изменения между базой данных и сопоставленной моделью. И набор опций для генерации объектов базы данных очень ограничен. Для всего, что вам нужно дополнительно, вы должны ввести SQL-предложения в код миграции. Эти заявления являются вашей собственной ответственностью. Вы должны выяснить сами, нужна ли миграция оператор ALTER PROCEDURE
или нет (например). EF не будет жаловаться, если сценарий и база данных отличаются в этом отношении.
Это главная причина, почему я никогда не был большим поклонником миграций. Практически невозможно поддерживать зрелую схему базы данных, включая хранилище, группы файлов, привилегии, параметры сортировки и все, что у вас есть.
Еще одним преимуществом DP является то, что они великолепны в сочетании с контролем источников. Каждый объект базы данных имеет свой собственный файл, и очень легко проверить историю изменений каждого отдельного объекта. Это невозможно при сгенерированных миграциях. Действительно, многие промежуточные изменения могут никогда не привести к сгенерированной миграции.
Конечно, очевидным преимуществом миграции является возможность проверки во время выполнения (хотя и неполной), совпадают ли код и база данных. В проектах, основанных на базе данных, вам нужно создать собственный механизм для этого.