Лабораторная работа № 2
.pdfЕгоров А.А. |
Технология программирования |
АСОИУ |
Технология
программирования
Лабораторная работа №2
1
Егоров А.А. |
Технология программирования |
АСОИУ |
Лабораторная работа № 2
Entity Framework
Цель работы: Изучение подходов к разработке Entity Framework.
Задание:
1.Создать проект Windows 32 Application.
2.Подключиться к базе данных AdwentureWorks (подход Database First).
Дополнительный материал.
ADO.NET Entity Framework представляет собой набор технологий ADO.NET,
обеспечивающих разработку приложений, связанных с обработкой данных. Архитекторам и разработчикам приложений, ориентированных на обработку данных, приходится учитывать необходимость достижения двух совершенно различных целей. Они должны моделировать сущности, связи и логику решаемых бизнес-задач, а также работать с ядрами СУБД, используемыми для сохранения и получения данных. Данные могут распределяться по нескольким системам хранения данных, в каждой из которых применяются свои протоколы, но даже в приложениях, работающих с одной системой хранения данных, необходимо поддерживать баланс между требованиями системы хранения данных и требованиями написания эффективного и удобного для обслуживания кода приложения.
Существует три подхода к разработке приложений с помощью Entity Framework
(рис. 1):
Database First;
Model First;
Code First.
2
Егоров А.А. |
Технология программирования |
АСОИУ |
Рис. 1 – Подходы к работе с данными в Entity Framework
Database First
В случае уже имеющейся базы данных Entity Framework может автоматически создать модель данных, состоящую из классов и свойств, соответствующих объектам базы даных (таким, как таблицы и столбцы). Информация о структуре базы (store schema),
модель данных (conceptual model) и маппинг их друг на друга содержится в XML в файле
.edmx. Visual Studio предоставляет графический дизайнер Entity Framework, с помощью которого можно просматривать и редактировать .edmx. Части Getting Started With the Entity Framework и Continuing With the Entity Framework в материалах о Web Forms
используют подход Database First.
Model First
Если базы нет, вы можете начать с создания модели данных, используя дизайнер
Entity Framework Visual Studio. После окончания работ над моделью дизайнер сгенерирует
DDL (data definition language)-код для создания базы. В этом подходе для хранения информации о модели и маппингах также используется .edmx. What's New in the Entity Framework 4 включает небольшой пример разработки с использованием данного подхода.
3
Егоров А.А. |
Технология программирования |
АСОИУ |
Code First
Вне зависимости от наличия базы вы можете вручную написать код классов и свойств, соответствующих сущностям в базе и использовать этот код с Entity Framework
без использования файла .edmx. Именно поэтому можно порой увидеть, как этот подход называют code only, хотя официальное наименование Code First. Маппинг между store schema и conceptual model в represented by your code is handled by convention and by a special mapping API. Если базы
пересоздать её в случае изменений в модели.
Ход выполнения работы.
Шаг 1. Создание БД.
Создайте на основе скрипта из приложения 1 новую базу данных School.
Шаг 2. Создание проекта.
Создайте новый проект Win32 приложения.
4
Егоров А.А. |
Технология программирования |
АСОИУ |
Шаг 3. Создание формы Преподаватель
В созданном проекте выберите форму по умолчанию (Form1).
В области Свойства файла измените значение Имя файла на значение
CourseViewer.cs.
В окне Обозревателя решений дважды щелкните CourseViewer.vb или
CourseViewer.cs, чтобы открыть форму.
В области Свойства измените значение свойства Name на CourseViewer а
значение свойства Text на Course Viewer.
В окне Область элементов раскройте элемент Общие элементы управления,
перетащите элемент управления ComboBox на форму и измените имя элемента управления на departmentList.
В окне Область элементов перетащите элемент управления Button на форму,
измените имя этого элемента управления на closeForm, а значение свойства Text
—на Закрыть.
В окне Область элементов раскройте элемент Данные, перетащите элемент управления DataGridView на форму и измените имя элемента управления на courseGridView.
Дважды нажмите кнопку closeForm.
5
Егоров А.А. |
Технология программирования |
АСОИУ |
Откроется страница программного кода формы, и будет создан метод обработчика события closeForm_Click.
В тексте метода обработчика события closeForm_Click введите следующий код
для закрывания формы:
this.Close();
Шаг 4. Добавление шаблона элемента модели EDM ADO.NET
Выберите проект CourseManager в окне Обозреватель решений, щелкните его правой кнопкой мыши, укажите пункт Добавить, а затем выберите пункт Создать элемент.
Выберите в области Шаблоны пункт ADO.NET Entity Data Model.
В качестве имени модели введите School.edmx и нажмите кнопку Добавить.
Запуститься мастер Entity Data Model.
Шаг 5. Создание EDMX-файла
6
Егоров А.А. |
Технология программирования |
АСОИУ |
Нажмите кнопку Создать соединение.
Установите соединение к БД.
В диалоговом окне Выбор источника данных выберите источник данных и нажмите Продолжить.
В диалоговом окне Свойства соединения введите имя сервера, выберите метод проверки подлинности, введите имя базы данных School и нажмите кнопку ОК.
7
Егоров А.А. |
Технология программирования |
АСОИУ |
В диалоговом окне Выбор подключения к данным появятся заданные настройки подключения к базе данных.
Убедитесь, что установлен флажок Сохранить настройки соединения сущности в App.config как, а значение установлено в SchoolEntities. Затем нажмите кнопку Далее.
Откроется диалоговое окно Выбор объектов базы данных.
Выделите все таблицы и хранимые процедуры и убедитесь, что параметр Пространство имен модели имеет значение SchoolModel.
Установите флажки Формировать имена объектов во множественном или единственном числе и Включить столбцы внешнего ключа в модель.
На экране откроется стартовая страница мастера моделей EDM.
Шаг 6. Просмотр EDMX-файла в конструкторе моделей EDM ADO.NET
Модель School откроется в окне конструктора моделей EDM ADO.NET, как показано на следующей схеме.
8
Егоров А.А. |
Технология программирования |
АСОИУ |
Шаг 7. Запрос по отделам в базе данных School
В начале файла с кодом для формы CourseViewer добавьте директиву using (C#) или Imports (Visual Basic), чтобы сослаться на модель, созданную из базы
данных School, и пространство имен сущностей.
using System.Data.Objects;
using System.Data.Objects.DataClasses;
В начале определения разделяемого класса для формы CourseViewer
добавьте следующий код, создающий экземпляр ObjectContext.
private SchoolEntities schoolContext;
В конструкторе форм CourseViewer дважды щелкните форму CourseViewer.
Откроется страница с кодом формы, и будет создан метод обработчика события courseViewer _Load.
В методе обработчика события courseViewer _Load скопируйте и вставьте следующий код, который определяет представление DataGridView,
выполняет запрос, возвращающий коллекцию отделов (упорядоченную по
9
Егоров А.А. |
Технология программирования |
АСОИУ |
параметру Name), и привязывает коллекцию объектов Department к
элементу управления departmentList.
schoolContext = new SchoolEntities();
var departmentQuery = from d in schoolContext.Departments.Include("Courses")
orderby d.Name select d;
try
{
this.departmentList.DisplayMember = "Name"; this.departmentList.DataSource =
((ObjectQuery)departmentQuery).Execute(MergeOption.AppendOnly);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Шаг 8. Отображение курсов для выбранного отдела
В конструкторе форм CourseViewer дважды щелкните элемент управления departmentList.
Будет создан метод обработчика события departmentList_SelectedIndexChanged.
Вставьте следующий код, загружающий курсы, связанные с выбранным отделом.
try
{
Department department = (Department)this.departmentList.SelectedItem; courseGridView.DataSource = department.Courses;
courseGridView.Columns["Department"].Visible = false; courseGridView.Columns["StudentGrades"].Visible = false; courseGridView.Columns["OnlineCourse"].Visible = false; courseGridView.Columns["OnsiteCourse"].Visible = false; courseGridView.Columns["People"].Visible = false; courseGridView.Columns["DepartmentId"].Visible = false;
courseGridView.AllowUserToDeleteRows = false; courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Шаг 9. Сохранение изменений, внесенных в объекты
В Области элементов разверните узел Общие элементы управления,
перетащите элемент управления Кнопка в конструктор формы CourseViewer,
измените имя элемента управления на saveChanges и измените значения Text
на Обновить.
10