Код Первая существующая база данных против дизайнера EF в существующую базу данных

Мы начинаем новый крупный корпоративный проект. База данных будет составлять более 100 таблиц, и мы будем использовать Entity Framework, Web API и MVC.

Мой вопрос специально связан с аспектами платформы Entity Framework. Я пытаюсь сделать выбор между следующим:

  • Сначала код в существующую базу данных
  • Конструктор EF для существующей базы данных (сначала база данных)

Я знаю, что мы можем использовать EF для генерации базы данных из кода сначала или из дизайнера EF, но мы предпочитаем иметь полный контроль над базой данных и развивать это традиционным способом, поэтому мы исключили опции EF, которые позволяют нам для автоматической генерации базы данных.

Большинство из того, что я могу найти в Интернете, относящееся к Code First, связано с созданием новой базы данных, а затем с использованием кодовых миграций. И когда обсуждения касаются базы данных сначала, дискуссии одобряют EF Designer. Пример здесь: Код-первый против первой модели/базы данных

Мое предпочтение заключается в том, чтобы сочетать код First с существующей базой данных.

Ниже перечислены мои соображения в пользу этого варианта, и мне интересно, есть ли что-то еще, что мне нужно учитывать, и правильны ли мои предположения/мысли.

Код сначала для существующей базы данных

  • В начале будет построено большое количество классов, но мы можем сделать начальное поколение из мастера моделей EF.
  • Затем классы могут быть модифицированы с помощью любых настраиваемых свойств или для удаления чего-либо, что нам не нужно, а не из конструктора EF, который потребует от нас расширения любых классов.
  • Недостатком является то, что любые изменения в базе данных должны быть добавлены вручную в наши классы, в отличие от использования конструктора, который позволит легко обновить.

Изменить: Кажется, я был в замешательстве в этой области. Из чтения видно, что правильный способ Data Data состоит в том, чтобы создать частичные классы для всех созданных автоматически классов, а затем внести какие-либо изменения в частичные классы как часть уровня "бизнес". Поэтому моя мысль изменилась с того, что вы предпочитаете Code First from Database, использовать EF Designer для существующей базы данных и затем создавать частичные классы.

Ответы

Ответ 1

В любом случае вам придется синхронизировать EDM (модель данных сущности) и БД. Вы должны убедиться, что EDM полностью совместим с вашей базой данных. Если нет, это не сработает, независимо от того, является ли это кодом First или вы используете модель.

Единственное отличие состоит в том, что:

  • с помощью конструктора вы можете сделать это графически и легко установить свойства, имена столбцов и т.д.
  • используя Code First, вы должны установить эти свойства, имена столбцов, типы данных и т.д., используя соглашения, Fluent API или атрибуты

С первым кодом единственное преимущество заключается в том, что после синхронизации модели Code First (см. "Code First также EDM, но несколько ограниченный" ) и базы данных вы можете начать использовать Migrations и разработать свою модель, используя которые впоследствии облегчают применение изменений в производственной БД (всякий раз, когда выпускается новая версия). С графической моделью вы не можете использовать миграции и должны обновлять Db непосредственно из Visual Studio или создавать сценарии SQL DDL вручную.

Code First также является EDM, но с несколькими отсутствующими функциями

Не имеет значения, используете ли вы код First или нарисуете модель, будет создана EDM (модель данных сущности). Если вы привыкли разрабатывать базы данных, возможно, вам будет удобнее использовать конструктор. Остерегайтесь заметок на EF Core (бывший EF7) ниже!.

Однако EDM, сгенерированный Code First, имеет несколько ограничений, которые у дизайнера нет.

Самые выдающиеся ограничения Code First - это то, что в дизайнере вы можете легко отображать определенные пользователем функции из BD, например скалярные и табличные значения, и хранимые процедуры. С Code First существует гораздо больше ограничений.

в EF 6.1 большинство этих ограничений исчезает, но все же немного сложно сделать сопоставления. (На самом деле, на сегодняшний день, 2014, там только образец и простой пакет Nuget о том, как это сделать.).

По состоянию на март 2017 года не Core EF, то есть EF Core 6.1, больше не обновляется. MS, вероятно, решит ошибки, если они появятся, но не ожидайте дальнейших изменений

Изменения в EF Core, fomer EF7 (по состоянию на 2015 год)

В настоящее время Microsoft разрабатывает EF 7, но также поддерживает EF 6.x. Текущая рекомендация состоит в том, чтобы продолжать использовать EF 6 в течение некоторого времени, потому что EF 7 недостаточно зрел.

EF 7 разрабатывается с нуля для преодоления унаследованного объекта ObjectContext, который создает ужасные ограничения для реализации новых функций. Но он реализует наиболее широко используемый DbContext с небольшими изменениями. Итак, если вы используете DbContext, у вас будет легкий путь миграции к входящим новым версиям EF.

Однако есть очень важное изменение: в EF Core (прежний EF7) модель EDM исчезает в пользу моделей Code First. Итак, если вы хотите использовать сегодняшнюю технологию и обеспечить легкое обновление до новых версий, не используйте First First или Database First: используйте Code First. Для Microsoft есть важные причины для принятия этого решения: Code First работает намного лучше в командной среде с контролем версий и позволяет работать с Migrations. В любом случае tou все еще может видеть модель графическим способом (с Power Toools) или использовать сторонний инструмент для создания модели с помощью дизайнера (некоторые из существующих коммерческих решений будут поддерживать это для EF7).

ПРИМЕЧАНИЕ. Почему в командной среде намного лучше Code First? Если несколько членов команды изменяют модель, гораздо проще объединить изменения в нескольких файлах кода, чем в большом XML файле, с большим количеством строк, которые определяют модель. Также гораздо труднее понять изменения между версиями в этом XML файле hugh. Для средних или больших проектов я рекомендую вам перейти на Code First ASAP