Подтвердить что ты не робот

Первая модель EF или первый подход к коду?

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

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

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

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

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

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

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

-Подробная поддержка/помощь по первым проблемам кода

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

-Им начинающий кодер.

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

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

-Маширование объектов в базу данных через классы конфигурации я считаю невозможным:).

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

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

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

Большое спасибо dave

4b9b3361

Ответ 1

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

Сначала кодовая x Первая модель x Первая база данных

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

  • Раньше вы выполняли SQL DB Admin - вы, вероятно, знаете что-то о БД и о том, как их проектировать для производительности - EF ничего не сделает из этого для вас. EF не будет создавать индексы для вас и т.д.
  • 30-40 столов означает, что вы не будете строить модель за один раз. Вы начнете с небольшой модели и будете постоянно ее выращивать. После того, как вы начнете вносить изменения в БД или добавляете данные инициализации, вы не захотите потерять эти изменения и данные. Code-first позволяет только удалять всю базу данных и воссоздавать ее с нуля. Сначала модель позволяет строить БД постепенно, но вам нужно Блок создания базы данных Entity Designer и VS 2010 Premium или Ultimate ($ 5.000- $10.000).

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

API-интерфейс DbContext + Database-first + Fluent

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

API-интерфейс DbContext x API ObjectContext

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

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

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

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

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

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

MVC 3

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

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

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

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

Ответ 2

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

Ответ 3

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

+

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

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

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

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

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

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

Взгляните на эти вещи, которые помогут вам с кодом вначале много imo:

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

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

Ответ 4

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

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

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

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