Модель EF First или Code First? - PullRequest
       31

Модель EF First или Code First?

41 голосов
/ 27 апреля 2011

Я знаю, что этот вопрос задавался много раз прежде, так как я прочитал довольно много постов на тему о плюсах и минусах и т. Д., Но я все еще не могу решить, какой подход мне подходит.Я очень новичок в веб-программировании и пришел из базы данных администратора базы данных SQL.Я решил попробовать создать свой собственный веб-сайт, который может иметь 30-40 таблиц, а может и больше в будущем.

Я рассмотрел оба подхода и предпочитаю подход Entity Model только потому, что мне нравится простотадизайнера, и мне нравится видеть всю модель перед собой, она показывает общую картину в одном снимке.Кроме того, я не являюсь сильным программистом, и я впечатлен тем, как он генерирует POCO с использованием шаблона генератора DbContext и выполняет все связи между классами.

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

Причины, по которым я не решаюсь использовать подход Model First:

- В основном потому, что я изо всех сил пытаюсь найти учебники по подходу Model first, используя MVC 3. Лучший учебник, который я нашел, используяDbContext принадлежит Джули Лерман, но она не охватывает классы собеседников, которые важны для использования аннотаций данных и внесения других изменений, которые не теряются при регенерации POCO.Кажется, что в большинстве учебных пособий, связанных с MVC 3, сначала используется подход Code.Большинство людей говорят, что это потому, что репетитор не хочет фокусироваться на EF, а скорее показывает больше MVC в рекламе.Я лично думаю, что это потому, что Microsoft отстаивает методологию Code First над другими:)

-Если это хорошая практика для создания классов друзей, почему я не могу найти много учебных пособий, показывающих это для MVC 3?Классы друзей - другое название для моделей представления?И почему я не могу найти какие-либо учебники от Microsoft, показывающие эти модели приятелей / представлений, используемые с MVC 3?

- я пытался установить базовое соотношение 1 к 1 между 2 таблицами.Сначала в модели вы должны установить идентичные ключи каждой таблицы в одно и то же поле, а не использовать FK в одной из таблиц, что может немного запутать, если у вас есть 3 или более таблиц, связанных между собой отношениями 1: 1.,Сначала в коде можно использовать построитель моделей и настроить его вручную.Я думаю, что в MF вы можете изменить отношения, войдя в XML, который я совсем не заинтересован в

-Больше поддержки / помощи при первых проблемах с кодом

ПричиныЯ не решаюсь использовать подход Code First:

- Я начинающий программист.

- Мне кажется, что по мере расширения проекта становится трудно отслеживать таблицы и взаимосвязи.

- Диаграммы моделей нет, и я должен сказать, что мне действительно нравится эта идея.

- Отображение сущностей в базу данных с помощью классов конфигурации, которые я считаю невозможными:).

- Обновление таблицы потребует изменения кода и БД.В Model first только одно изменение в модели, которое автоматически обновит DB и Code, сказав, что если вы используете классы собеседников, вам, возможно, придется обновить их.

Также теперь я вижу, что люди несколько объединяютCode First и Database first подходят тем, что вы не позволяете Code First сгенерировать вашу базу данных, а создаете базу данных вручную и используете API first code для EF, чтобы добраться до нее.

У меня кружится голова со всеми вариантами и недостатками, плюсами и минусами.Я просто хочу заняться созданием своего сайта, а не размышлять над тем, какой подход выбрать.Кто-нибудь может дать мне некоторое представление о том, какой подход, по их мнению, лучше всего основан на том, что я сказал, и / или что, по их мнению, будет более популярным в будущем?

Большое спасибо, Дейв

Ответы [ 4 ]

37 голосов
/ 27 апреля 2011

Это слишком длинный вопрос.В следующий раз вы должны разбить свою проблему на несколько отдельных вопросов.

Код первый x Модель первый x База данных первый

Вы - специалист по базе данных, поэтому для вас лучше всего использовать инкрементную базу данных-Первый подход, при котором вы определяете материал в БД (или инструменты БД VS) и обновляете свою модель из базы данных.Это даст вам большой контроль над вашей базой данных и позволит постепенно создавать приложение и базу данных.Почему, я думаю, вам понравится:

  • Вы уже работали с администратором БД SQL - вы, наверное, знаете что-то о БД и как их проектировать для производительности - EF ничего для вас не сделает из этого.EF не будет создавать индексы для вас и т. Д.
  • 30-40 таблиц означает, что вы не построите модель за один раз.Вы начнете с маленькой модели и будете постоянно ее наращивать.Как только вы начнете вносить изменения в БД или добавлять данные инициализации, вы не захотите потерять эти изменения и данные.Code-first позволяет только удалить всю базу данных и воссоздать ее с нуля.Модель сначала позволяет наращивать БД постепенно, но вам необходим Блок питания для создания баз данных Entity Designer и VS 2010 Premium или Ultimate ($ 5000–10 000).

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

DbContext API + База данных сначала + отображение Fluent

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

DbContext API x ObjectContext API

Как только вы начнете использовать EDMX (конструктор сущностей), у вас есть выбор:либо шаблон T4 DbContext Generator, либо шаблон POCO Generator T4.Решение за вами - вы можете использовать либо API-интерфейс DbContext (первый шаблон), либо API-интерфейс ObjectContext (второй шаблон), который гораздо лучше задокументирован, а также вы можете использовать две замечательные книги:

Все, что я знаю об API ObjectContext, взято из этих книг, блогов авторов и практики + Reflector.

DbContext API в настоящее время не имеет книг.Вы можете проверить некоторые основные сайты, чтобы получить информацию об этом:

Все, что я знаю о DbContext API, это из этих блогов и практики + Reflector.

Даже если вы сначала используете код, выможно по-прежнему использовать диаграмму классов для визуализации диаграммы вашего класса (она отличается от EDMX, но этого достаточно для получения общей картины).

Поиск по переполнению стека или форум MSDN даствы отвечаете на большинство проблем, которые у вас возникнут с обоими API.

MVC 3

Нет ничего конкретного в использовании инфраструктуры объектов с MVC 3. Классы друзей для аннотаций проверки данных считаются плохой практикой.Класс партнера - это отдельный класс, используемый в качестве держателя метаданных, применяемого к объекту.Модель представления - это класс, используемый для передачи данных между контроллером и представлением.Модель представления должна быть индивидуальной для каждого представления с ее собственными аннотациями проверки, потому что вам обычно нужны разные проверки на разных экранах вашего приложения при работе с одним и тем же типом сущности - например, экран редактирования и вставки может иметь разные требования проверки.

Несмотря на то, что это не считается хорошей практикой, добавление проверки к сущностям возможно - вы можете создать класс друзей для каждой вашей сущности вручную или вы можете попробовать изменить шаблон T4 для генерации аннотацийнепосредственно для вас (ну, это сложно).

Отношение один-к-одному

Да EF требует создания отношения один-к-одному только поверх первичных ключей.Причина в том, что EF не поддерживает уникальные ключи / ограничения.Обойти это невозможно, и использование уникальных ключей в базе данных не изменит его.

8 голосов
/ 27 апреля 2011

Это относительно просто.Если вас не интересует модель базы данных, сначала используйте код.Если вы это сделаете, сначала используйте Model (или Database First).Это зависит только от того, где вы сосредоточены, на данных или коде.

3 голосов
/ 27 апреля 2011

Я рассмотрел оба подхода и предпочитаю подход Entity Model только потому, что мне нравится простота дизайнера, и мне нравится видеть всю модель перед собой, она показывает общую картину в одном снимке.Кроме того, я не являюсь сильным программистом, и я впечатлен тем, как он генерирует POCO с использованием шаблона генератора DbContext и выполняет все связи между классами.

+

Отображение сущностей в базу данных с помощью классов конфигурации, которые я считаю невозможными:).

= сначала использовать модель

ЕслиЭто хорошая практика для создания классов друзей, почему я не могу найти много учебников, показывающих это для MVC 3?Классы друзей - другое название для моделей представления?И почему я не могу найти какие-либо учебники от Microsoft, показывающие эти модели приятелей / представлений, используемые с MVC 3?

Возможно, это связано с тем, что первый код - это что-то вроде нового ребенка в блоке.Вот почему в MVC3 есть в основном учебник с написанием кода.Модель-первая «намного» старше и, вероятно, была наиболее популярным решением во времена MVC2.

Кстати: вы уже знаете мое мнение, что вам следует использовать то, что вам больше нравится или вы считаете наиболее удобным (как я уже говорил)Вы в прошлый раз спрашивали об этом), но я просто хотел кое-что добавить сюда:)

Редактировать после комментариев:

Посмотрите на эти вещи, которые будутСначала я вам очень помогу с кодом:

Создание модели данных Entity Framework для приложения ASP.NET MVC (1 из 10) Поместите ваш проект в ASP.NET MVC 3с пакетом MvcScaffolding

++ эти великолепные видео с MIX11 на канале 9:
Скотт Хансельман демонстрирует новые вещи своим удивительным образом, как обычно
СтивСандерсон демонстрирует мощь MvcScaffolding

0 голосов
/ 27 апреля 2011

Вы можете использовать первые примеры моделей из любой версии MVC, если это ваша основная проблема с моделью в первую очередь. То, как MVC обрабатывает «модели», не сильно отличается в разных версиях. Конечно, есть улучшения в модели представления и т. Д., Но вы должны быть в порядке с более старыми уроками.

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

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

Только мои 2 цента.

...