Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
госы 2013.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
4.28 Mб
Скачать

Вопрос № 94

Методологические подходы дизайна модели данных (Model first, Database first) для построения клиент-серверных приложений.

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

Рабочие процессы Code First, Model First или Database First для создания концептуальной модели.

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

Три варианта создания концептуальной модели

Entity Framework опирается на концептуальную модель сущностей вашей предметной области, называемую Entity Data Model (EDM), и выбор того, как создавать эту модель, является самым первым шагом. Вы можете выбрать один из трех рабочих процессов:

  • Database First — вы начинаете с существующей базы данных и используете мастер для генерации на ее основе концептуальной модели;

  • Model First — вы начинаете с нуля. С помощью визуального дизайнера (EDM Designer) проектируется EDM, а затем на ее основе генерируется схема базы данных;

  • Code First — вы начинаете с классов, которые описывают вашу концептуальную модель. В этом случае визуальная модель отсутствует.

Database First: начинаем с существующей базы данных

На первой итерации Entity Framework у нас не было всех упомянутых вариантов. Единственный способ создания модели заключался в обратном проектировании существующей базы данных для преобразования в EDM, которое мы назвали моделированием Database First («сначала база данных») (рис. 1).

Рис. 1. При использовании Database First модель генерируется на основе существующей базы данных

На самом деле, вероятно, вы не раз видели такое. Вы открываете EDM Wizard, указываете ему существующую базу данных, выбираете, какие таблицы, представления, хранимые процедуры и пользовательские функции должны быть представлены в модели, потом щелкаете кнопку Finish. И тут же рождается модель. При подходе Database First модель начинает свою жизнь как виртуальное отражение базы данных (или ее подмножества, выбранного вами). Даже не прикладывая больше никаких усилий, разработчики все равно получат выигрыш от Entity Framework. Вы можете писать строго типизированные запросы к этой модели, и Entity Framework будет выполнять запросы за вас, материализуя строго типизированные объекты из набора результатов. Затем, когда вы работаете с результатами, Entity Framework отслеживает изменения и позволяет сохранять их в базе данных простым вызовом команды SaveChanges.

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

При подходе Database First вы можете получить лучшее из двух миров: использовать существующую базу данных для очень быстрого создания модели, а затем изменять эту модель, чтобы она точнее отражала предметную область вашего приложения.

Model First: начинаем с визуальной модели

У вас не всегда будет в наличии база данных. Подход Model First позволяет проектировать модель в дизайнере и создать на основе этой модели схему вашей базы данных. Вы можете создавать свои сущности и их свойства, определять отношения и их ограничения, а также формировать иерархии наследовании прямо в дизайнере. Вы даже можете указать, какие свойства станут идентификационными ключами (identity keys) и должна ли база данных сама генерировать их значения (рис. 2).

Рис. 2. При использовании Model First вы проектируете модель, применяемую для генерации схемы базы данных

Функция Create Database from Model в EDM Designer на самом деле не создает базу данных — она генерирует SQL-код, при выполнении которого будет определена схема базы данных. Этот SQL-код имеет формат Data Definition Language (DDL).

Вы должны понимать несколько не вполне очевидных вещей. Поддержка Model First введена вVisual Studio 2010 и Microsoft .NET Framework 4. Вы не найдете Create Database в Visual Studio 2008. Кроме того, поскольку это новая функция, вам потребуется обновить используемый провайдер ADO.NET Data (например, System.Data.Sql) до версии, где эта функция уже поддерживается. Провайдер Microsoft SQL Server был обновлен при выпуске .NET 4; также были обновлены некоторые сторонние провайдеры.

Будьте готовы к тому, что в случае Model First инкрементальные обновления схемы вашей базы данных по умолчанию не осуществляются. При использовании соответствующей функции вы получите совершенно новый DDL-скрипт, который удалит и заново создаст все объекты базы данных. Модифицировать схему базы данных, не перезаписывая ее полностью, помогут внешние инструменты. В ином случае вы наверняка захотите либо заранее создавать резервную копию данных, либо написать скрипт, регенерирующий ваши тестовые данные при каждой модификации модели и повторном создании схемы базы данных.

Visual Studio предоставляет точку расширения в процессе генерации базы данных, которую можно использовать с помощью Entity Designer Database Generation Power Pack от Microsoft. Данный пакет можно скачать из Visual Studio 2010 Extension Manager или по ссылке visualstudiogallery.com. Это расширение позволяет не только вносить инкрементальные изменения в базу данных при использовании подхода Model First, но и изменять исходное сопоставление наследования Table Per Hierarchy или даже создавать собственные правила генерации DDL.

Code First: начинаем с кода и отказываемся от физической модели

При подходах Database First и Model First вы в конечном счете получаете физическое представление вашей EDM вместе с дополнительными метаданными. Исходный формат этой модели — XML. Он хранится в файле с расширением .edmx, и вы можете работать с ним в EDM Designer или как с чистым XML-кодом. В период выполнения Entity Framework считывает этот XML и создает представление модели в памяти, используя специализированные классы, представляющие метаданные — сущности, отношения и др. Исполняющая среда Entity Framework работает с этими объектами, а не с самим XML-файлом. Эти метаданные особенно важны, когда Entity Framework нужно преобразовывать запросы к модели в запросы к базе данных и получаемые наборы результатов в экземпляры сущностей, а также создавать команды базы данных для операций вставки, обновления и удаления. Visual Studio сгенерирует классы вашей предметной области из XML для последующего использования в приложении.