Каковы плюсы и минусы использования Entity Framework 4.1 сначала кода, а не модели / базы данных сначала с диаграммой EDMX?
Я пытаюсь полностью понять все подходы к созданию уровня доступа к данным с использованием EF 4.1. Я использую репозиторий и шаблон IoC
.
Я знаю, что могу использовать подход, основанный на коде: определить свои сущности и контекст вручную и использовать ModelBuilder
для точной настройки схемы.
Я также могу создать EDMX
диаграмму и выбрать шаг генерации кода, который использует шаблоны T4 для генерации тех же POCO
классов.
В обоих случаях я получаю POCO
объект, который не зависит от ORM
контекста и контекста DbContext
.
База данных в первую очередь кажется наиболее привлекательной, поскольку я могу спроектировать базу данных в Enterprise Manager, быстро синхронизировать модель и настроить ее с помощью конструктора.
Так в чем же разница между этими двумя подходами? Это просто предпочтение VS2010 по сравнению с Enterprise Manager?
Ответы:
Я думаю, что различия:
Код первый
База данных первая
Модель первая
Я ожидаю, что в случае EF 4.1 есть несколько других функций, связанных с Code First и Model / Database сначала. Свободный API, используемый в Code сначала, не предлагает все функции EDMX. Я ожидаю, что такие функции, как отображение хранимых процедур, представления запросов, определение представлений и т. Д., Работают при первом использовании Model / Database и
DbContext
(я еще не пробовал), но в первую очередь их нет в Code.источник
DbContext
что существует вObjectContext
простом использовании((IObjectContextAdapter)dbcontext).ObjectContext
.Я думаю, что это простое «дерево решений» Джули Лерман, автора «Programming Entity Framework», должно помочь принять решение с большей уверенностью:
Больше информации здесь .
источник
База данных сначала и модель сначала не имеют реальных отличий. Сгенерированный код одинаков, и вы можете комбинировать этот подход. Например, вы можете создать базу данных с помощью конструктора, а затем изменить базу данных с помощью сценария sql и обновить свою модель.
Когда вы сначала используете код, вы не можете изменить модель без базы данных для восстановления и потери всех данных. ИМХО, это ограничение очень строгое и не позволяет использовать код первым в производстве. На данный момент это не совсем пригодно для использования.
Вторым незначительным недостатком первого кода является то, что построителю модели требуются права доступа к базе данных master. Это не влияет на вас, если вы используете базу данных SQL Server Compact или управляете сервером базы данных.
Преимущество кода сначала очень чистый и простой код. Вы имеете полный контроль над этим кодом и можете легко изменять и использовать его в качестве модели представления.
Я могу порекомендовать использовать подход, основанный на коде, при создании простого автономного приложения без управления версиями и сначала при использовании модели \ базы данных в проектах, требующих внесения изменений в производство.
источник
Цитирование соответствующих частей из http://www.itworld.com/development/405005/3-reasons-use-code-first-design-entity-framework
источник
Code-first кажется восходящей звездой. Я быстро взглянул на Ruby on Rails, и их стандарт - сначала код, с миграциями баз данных.
Если вы создаете приложение MVC3, я считаю, что сначала у Code есть следующие преимущества:
Обновить
Этот вопрос также требует сравнения кода-первого с моделью EDMX / db-first. Code-first можно использовать для обоих этих подходов:
источник
Сначала я использую базу данных EF, чтобы обеспечить большую гибкость и контроль над конфигурацией базы данных.
Сначала код EF и модель сначала казались крутыми и обеспечивают независимость от базы данных, однако при этом они не позволяют вам указать то, что я считаю очень простой и распространенной информацией о конфигурации базы данных. Например, индексы таблиц, метаданные безопасности или первичный ключ, содержащий более одного столбца. Я обнаружил, что хочу использовать эти и другие распространенные функции базы данных и, следовательно, в любом случае должен выполнить настройку базы данных напрямую.
Я считаю, что классы POCO по умолчанию, сгенерированные во время БД, очень чистые, но в них отсутствуют очень полезные атрибуты аннотации данных или сопоставления с хранимыми процедурами. Я использовал шаблоны T4, чтобы преодолеть некоторые из этих ограничений. Шаблоны T4 великолепны, особенно в сочетании с вашими собственными метаданными и частичными классами.
Сначала модель, кажется, имеет большой потенциал, но она дает мне много ошибок при рефакторинге сложной схемы базы данных. Не уверен почему.
источник
Работа с большими моделями была очень медленной до SP1 (не пробовала его после SP1, но говорят, что это совсем несложно).
Я все еще сначала проектирую свои таблицы, затем встроенный инструмент генерирует для меня POCO, поэтому он берет на себя бремя выполнения повторяющихся задач для каждого объекта poco.
Когда вы используете системы контроля версий, вы можете легко следить за историей ваших POCO, это не так просто с помощью сгенерированного дизайнером кода.
У меня есть база для моего POCO, которая делает многие вещи довольно легкими.
У меня есть представления для всех моих таблиц, каждое базовое представление приносит основную информацию для моих внешних ключей, и мои POCO представления происходят из моих классов POCO, что снова весьма полезно.
И, наконец, я не люблю дизайнеров.
источник
Пример первого подхода к базе данных:
Без написания какого-либо кода: ASP.NET MVC / MVC3 База данных Первый подход / База данных в первую очередь
И я думаю, что это лучше, чем другие подходы, потому что при таком подходе потеря данных меньше.
источник
ИМХО Я думаю, что все модели имеют отличное место, но проблема, с которой я сталкиваюсь с подходом сначала модель, во многих крупных компаниях, когда администраторы баз данных контролируют базы данных, вы не получаете гибкости при создании приложений без использования подходов базы данных сначала. Я работал над многими проектами, и когда дело дошло до развертывания, они хотели получить полный контроль.
Поэтому, насколько я согласен со всеми возможными вариантами Code First, Model First, Database сначала, вы должны учитывать реальную производственную среду. Поэтому, если ваша система будет представлять собой большое пользовательское приложение с большим количеством пользователей и администратором, проводящим шоу, то вы могли бы рассмотреть вариант «База данных в первую очередь», только мое мнение.
источник
Я думаю, что одним из преимуществ кода в первую очередь является то, что вы можете сохранить все изменения, которые вы внесли в систему контроля версий, такую как Git. Поскольку все ваши таблицы и отношения хранятся в том, что по сути являются просто классами, вы можете вернуться назад во времени и посмотреть, какой была структура вашей базы данных раньше.
источник