Код первой базы данных-Первый против модели/
каковы плюсы и минусы использования Entity Framework 4.1 Code-first over Model / Database-first с диаграммой EDMX?
Я пытаюсь полностью понять все подходы к созданию уровня доступа к данным с помощью EF 4.1. Я использую шаблон репозитория и IoC
.
Я знаю, что могу использовать код-первый подход: определить мои сущности и контекст вручную и использовать ModelBuilder
для точной настройки схемы.
Я также могу создать EDMX
схему и выбрать шаг генерации кода, который использует шаблоны T4 для создания одного и того же POCO
классы.
в обоих случаях я в конечном итоге с
9 ответов:
Я думаю, что отличия есть:
код "первый"!--5-->
- очень популярны, потому что хардкорные программисты не любят никаких дизайнеров и определение отображения в EDMX xml слишком сложно.
- полный контроль над кодом (без кода автогенерируемые которую трудно изменить).
- общее ожидание заключается в том, что вы не беспокоитесь о БД. БД-это просто хранилище без логики. Эф будет обрабатывать создание и вы не хотите знать, как это делает работа.
- ручные изменения в базе данных будут, скорее всего, потеряны, потому что ваш код определяет базу данных.
базы данных первого
- очень популярный если у вас есть БД, разработанные администраторов баз данных, разработанных отдельно или если у вас уже есть БД.
- вы позволите EF создавать объекты для вас, и после изменения отображения вы будете генерировать объекты POCO.
- если вы хотите дополнительные функции в объектах POCO, вы должны либо T4 изменить шаблон или использовать разделяемые классы.
- ручные изменения в базе данных возможны потому, что база данных определяет вашу модель домена. Вы всегда можете обновить модель из базы данных (эта функция работает достаточно хорошо).
- Я часто использую это вместе против проектов баз данных (только премиум и конечная версия).
модель
- IMHO популярно, если вы поклонник дизайнера (= вам не нравится писать код или язык SQL.)
- вы "нарисуете" свою модель и позволите рабочему процессу генерировать сценарий базы данных и шаблон T4 генерировать ваши объекты POCO. Вы потеряете часть контроля как над своими объектами, так и над базой данных, но для небольших простых проектов вы будете очень продуктивны.
- если вы хотите дополнительные функции в объектах POCO, вы должны либо изменить шаблон T4, либо использовать разделяемые классы.
- ручные изменения в базе данных будут, скорее всего, потеряны, потому что ваша модель определяет база данных. Это работает лучше, если у вас установлен блок питания для генерации базы данных. Это позволит вам обновить схему базы данных (вместо воссоздания) или обновить проекты баз данных в VS.
Я ожидаю, что в случае EF 4.1 есть несколько других функций, связанных с Code First vs.Model/Database first. Fluent API, используемый в коде first, не предлагает всех функций EDMX. Я ожидаю, что такие функции, как отображение хранимых процедур, представления запросов, определение представлений и т. д. работает при использовании Сначала модель / база данных и
DbContext
(Я еще не пробовал), но они не в код первый.
Я думаю, что это простое "дерево решений" Джули Лерман, автор "Programming Entity Framework", должно помочь принять решение с большей уверенностью:
Подробнее здесь.
база данных первая и модель первая не имеет никаких реальных различий. Сгенерированный код один и тот же, и вы можете комбинировать эти подходы. Например, вы можете создать базу данных с помощью конструктора, чем вы можете изменить базу данных с помощью SQL-скрипта и обновить свою модель.
при использовании кода сначала вы не можете изменить модель без базы данных отдыха и потери всех данных. ИМХО, это ограничение очень строгое и не позволяет использовать код первым в производстве. На данный момент это не совсем так годный.
второй незначительный недостаток кода первый заключается в том, что построитель моделей требует привилегий в базе данных master. Это не влияет на вас, если вы используете SQL Server Compact database или если вы управляете сервером баз данных.
преимущество кода сначала очень чистый и простой код. Вы имеете полный контроль над этим кодом и можете легко изменить и использовать его в качестве модели представления.
Я могу рекомендовать использовать код первого подхода при создании простых отдельное приложение без управления версиями и использования model\database сначала в проектах, которые требуют модификации в производстве.
цитирование соответствующих частей из http://www.itworld.com/development/405005/3-reasons-use-code-first-design-entity-framework
3 причины использовать code first design с Entity Framework
1) меньше cruft, меньше раздувают
использование существующей базы данных для создания .модель edmx-файла и связанные модели кода приводят к гигантской куче автоматически сгенерированного кода. Ты умоляешь никогда не прикасаться к ним сгенерированные файлы, чтобы не сломать что-то, или ваши изменения будут перезаписаны на следующее поколение. Этот контекст и инициализатор также застряли вместе в этом беспорядке. Когда вам нужно добавить функциональность к вашим созданным моделям, например вычисленное свойство только для чтения, необходимо расширить класс модели. Это в конечном итоге является требованием почти для каждой модели, и вы в конечном итоге с расширением для всего.
с кодом сначала ваши ручные кодированные модели становятся вашими база данных. Точное файлы, которые вы создаете, - это то, что создает дизайн базы данных. Нет никаких дополнительных файлов и нет необходимости создавать класс расширение если вы хотите добавить свойства или что-то еще, что база данных не должна знать об этом. Вы можете просто добавить их в тот же класс, пока вы следуете правильному синтаксису. Черт, вы даже можете создайте модель.edmx файл для визуализации кода, если вы хотите.
2) больше Контроль
когда вы идете DB сначала, вы находитесь во власти того, что генерируется для модели для использования в вашем приложении. Иногда именование конвенция является нежелательным. Иногда отношения и ассоциации не совсем то, что вы хотите. Другие времена не переходные отношения с ленивой загрузкой наносят ущерб вашим ответам API.
в то время как почти всегда есть решение для проблем генерации моделей вы можете столкнуться, идя код сначала дает вам полный и прекрасный контроль с самого начала. Вы можете контролировать каждый аспект одновременно ваши модели кода и ваш дизайн базы данных с комфортом вашего бизнес-объект. Вы можете точно указать отношения, ограничения, и ассоциации. Вы можете одновременно установить ограничения символов свойств и размеры столбцов базы данных. Можно указать, какие связанные коллекции должны быть готовы загружены, или не быть сериализованы вообще. Короче, вы ответственный за больше вещей, но вы полностью контролируете свое приложение дизайн.
3) Контроль Версий Баз Данных
Это большой. Управление версиями баз данных сложно, но с кодом сначала и код первой миграции, это гораздо более эффективно. Потому что ваш схема базы данных полностью основана на ваших моделях кода, по версии управление исходным кодом вы помогаете версировать вашу базу данных. Вы несете ответственность за управление инициализацией контекста, которая может помочь вам сделать такие вещи, как семена фиксированных бизнес-данных. Ты тоже ... отвечает за создание первых миграций кода.
при первом включении миграции класс конфигурации и начальный миграция генерируются. Начальная миграция-это ваша текущая схема или ваш базовый уровень В1.0. С этого момента вы будете добавлять миграции которые помечены временем и помечены дескриптором, чтобы помочь упорядочение версий. При вызове add-migration из пакета менеджер, новая миграция будет создан файл, содержащий все это автоматически изменилось в вашей модели кода как в UP (), так и Вниз (функция). Функция UP применяет изменения к базе данных, функция DOWN удаляет те же изменения в случае, если вы хотите отмена. Более того, вы можете редактировать эти файлы миграции, чтобы добавить дополнительные изменения, такие как новые представления, индексы, хранимые процедуры и все остальное. Они станут истинной системой управления версиями для вашего база данных схема.
код-сначала появляется восходящая звезда. Я быстро взглянул на Ruby on Rails, и их стандарт-это code-first, с миграцией базы данных.
Если вы создаете приложение MVC3, я считаю, что код сначала имеет следующие преимущества:
- легкий атрибут украшения - вы можете украсить поля с проверкой, требуют и т. д.. атрибуты, это довольно неудобно с моделированием EF
- никаких странных ошибок моделирования - EF моделирование часто имеет странные ошибки, например, когда вы пытаетесь переименовать свойство ассоциации, оно должно соответствовать базовым метаданным-очень негибким.
- не неудобно сливать - при использовании инструментов контроля версий кода, таких как mercurial, слияние .файлы edmx-это боль. Вы программист, привыкший к C#, и там вы сливаете a .edmx. Не так с кодом-во-первых.
- контраст обратно в код сначала и у вас есть полный контроль без всех скрытых сложностей и с неизвестными нужно иметь дело.
- я рекомендую вам использовать инструмент командной строки диспетчера пакетов, даже не используйте графические инструменты для добавления нового контроллера в представления scaffold.
- DB-миграции - тогда вы также можете включить-миграции. Это так мощно. Вы вносите изменения в свою модель в коде, а затем платформа может отслеживать изменения схемы, поэтому вы можете легко развертывать обновления, при этом версии схемы автоматически обновляются (и при необходимости понижаются). (Не уверен, но это, вероятно, тоже работает с моделью)
обновление
вопрос также требует сравнения code-first с EDMX model / db-first. Code-first также может использоваться для обоих этих подходов:
- Модель-Первый: сначала кодирование POCOs (концептуальная модель), затем формирование база данных (миграции); или
сначала я использую базу данных EF, чтобы обеспечить большую гибкость и контроль над конфигурацией базы данных.
EF code first и model first сначала казались классными и обеспечивали независимость от базы данных, однако при этом он не позволяет указать, что я считаю очень простой и общей информацией о конфигурации базы данных. Например, индексы таблиц, метаданные безопасности или первичный ключ, содержащий более одного столбца. Я считаю, что хочу использовать эти и другие общие функции базы данных и, следовательно, должны сделать некоторую конфигурацию базы данных непосредственно в любом случае.
Я считаю, что классы POCO по умолчанию, созданные во время DB first, очень чисты, однако им не хватает очень полезных атрибутов аннотации данных или сопоставлений с хранимыми процедурами. Я использовал шаблоны T4, чтобы преодолеть некоторые из этих ограничений. Шаблоны T4 являются удивительными, особенно в сочетании с вашими собственными метаданными и частичными классами.
модель сначала, кажется, имеет большой потенциал, но дает мне много ошибок во время сложного рефакторинга схемы базы данных. Не знаю почему.
работа с большими моделями была очень медленной до SP1, (не пробовали его после SP1, но говорят, что это оснастка сейчас).
Я все еще разрабатываю свои таблицы сначала, затем встроенный инструмент создает POCOs для меня, поэтому он берет на себя бремя выполнения повторяющихся задач для каждого объекта poco.
когда вы используете системы управления версиями, вы можете легко следить за историей ваших POCOs, это не так просто с помощью кода, созданного дизайнером.
У меня есть база для моего POCO, что делает много вещей довольно легко.
У меня есть представления для всех моих таблиц, каждое базовое представление приносит основную информацию для моих внешних ключей, и мой вид POCOs происходит от моих классов POCO, что снова очень полезно.
и, наконец, я не люблю дизайнеров.
пример первого подхода к базе данных:
без написания кода: ASP.NET MVC / MVC3 Database First Approach / Database first
и я думаю, что это лучше, чем другие подходы, потому что потеря данных меньше с этим подходом.
IMHO я думаю, что все модели имеют большое место, но проблема, которую я имею с первым подходом к модели, заключается во многих крупных компаниях с управлением базами данных DBA, вы не получаете гибкость построения приложений без использования первых подходов к базе данных. Я работал над многими проектами, и когда дело дошло до развертывания, они хотели получить полный контроль.
Итак, насколько я согласен со всеми возможными вариантами кода сначала, сначала модель, сначала база данных, вы должны рассмотреть фактическая производственная среда. Поэтому, если ваша система будет большим пользовательским базовым приложением со многими пользователями и DBA запускает шоу, вы можете рассмотреть первый вариант базы данных только мое мнение.