Опубликован: 08.07.2011 | Доступ: свободный | Студентов: 1788 / 93 | Оценка: 4.15 / 4.08 | Длительность: 15:28:00
Лекция 5:

Взаимодействие приложения с базой данных

Аннотация: Рассматриваются основные положения модели "сущность-связь", её базовые компоненты: сущности, ассоциации и свойства. На учебном примере иллюстрируется процесс построения модели с использованием существующей базы данных. Для созданной страницы приложения PageEmployee и модели данных проводится привязка данных к интерфейсным элементам: текстовым, выпадающему списку, дате. Рассматриваются вопросы проектирования операций взаимодействия приложения с базой данных: редактирование, вставка и удаление данных. Описывается возможность проверки данных при их вводе с использованием пользовательских правил проверки.

Цель

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

Основные положения EDM модели

Взаимодействие с источником данных WCF-приложения базируется на модели "сущность-связь" – Entity Data Model (EDM) [ 1 ] , [ 6 ] , [ 9 ] . Модель EDM представляет набор основных понятий, которые описывают структуру данных независимо от формы хранения. Описываемые в модели EDM данные могут иметь различную структуру: реляционную, текстовые файлы, файлы XML, электронные таблицы и отчеты. Модель EDM описывает структуры данных на основе сущностей и связей, которые являются независимыми от схем хранения. В результате такого подхода форма хранения данных отделена от приложения и не влияет на его разработку. Это обеспечивается тем, что сущности и связи описывают структуру данных так, как она используется в приложении. Модель EDM является концептуальной моделью, которая описывает представление структуры данных в виде сущностей и связей.

Модель EDM использует три основных понятия для описания структуры данных:

  • тип сущности;
  • тип ассоциации;
  • свойство.

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

Тип ассоциации применяется для построения описаний связей в модели EDM. В концептуальной модели ассоциация представляет собой связь между двумя типами сущностей. Каждая ассоциация имеет две конечные точки ассоциации, которые определяют типы сущностей, участвующие в ассоциации. Каждая конечная точка ассоциации также определяет кратность конечной точки ассоциации, которая указывает число сущностей, могущих присутствовать на одной конечной точке ассоциации.

Типы сущностей содержат свойства, которые определяют их структуру и характеристики. Например, тип сущности "Сотрудник" может иметь свойства, такие как идентифицирующий номер, фамилию, имя, отчество, должность, дату рождения и адрес электронной почты.

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

Концептуальная модель является специфическим представлением структуры некоторых данных в виде сущностей и связей. Одним из способов представления концептуальной модели является схема. На рис. 5.1 приведена схема концептуальной модели базы данных TitlePersonal – "Персонал" с двумя типами сущностей ( Employee – Сотрудник и Title –роль/должность) и одной ассоциативной связью 1:* (один ко многим).

Концептуальная модель базы данных

Рис. 5.1. Концептуальная модель базы данных

Таблица Employee содержит данные по сотруднику. Атрибутами таблицы являются:

  • ID – код сотрудника;
  • Surname – фамилия;
  • Name – имя;
  • Patronymic – отчество;
  • BirstDate – дата рождения;
  • Telephone – телефон;
  • Email – адрес электронной почты;
  • TitleIDвнешний ключ для связи с таблицей Title.

Таблица Title является справочником должностей, имеющихся на предприятии, и включает следующие атрибуты:

  • ID – код должности;
  • Title – наименование должности.

Создание EDM-модели

Для создания EDM-модели данных добавим в проект новый элемент – модель ADO.NET EDM, присвоив файлу модели имя TitleEmployee.edmx ( рис. 5.2).

Добавление в проект модели EDM

увеличить изображение
Рис. 5.2. Добавление в проект модели EDM

В мастере создания EDM-модели выберем опцию "Создать из базы данных" ( рис. 5.3). Для создания соединения с базой данных в окне "Выбор подключения к данным" укажем соединение с базой данных (имя_сервера.имя_базы данных, в рассматриваемом примере – алексей-пк.TitlePerson) и зададим имя модели данных - TitlePersonEntities ( рис. 5.4).

Создание модели EDM из базы данных

увеличить изображение
Рис. 5.3. Создание модели EDM из базы данных
Создание соединения с базой данных

увеличить изображение
Рис. 5.4. Создание соединения с базой данных

В окне "Выбор объектов базы данных" отметим необходимые для приложения таблицы (в нашем случае это таблицы Employee и Title ) и флаг формирования объектов в единственном или множественном числе ( рис. 5.5).

Выбор таблиц базы данных

увеличить изображение
Рис. 5.5. Выбор таблиц базы данных

При завершении работы мастера создания EDM-модели в проект будет добавлен файл TitleEmployee.edmx ( рис. 5.6), ссыки на необходимые библиотеки и конфигурационный файл.

Проект с моделью EDM

увеличить изображение
Рис. 5.6. Проект с моделью EDM

Автоматически сгенерированный класс TitlePersonalEntities, который наследуется от класса ObjectContext, представляет сущности базы данных TitlePerson, содержит свойства, моделирующие таблицы Employee и Title, связи между таблицами.

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

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="TitlePersonalEntities" connectionString="metadata=res://*/TitlePersonal.csdl|res://*/TitlePersonal.ssdl|res://*
/TitlePersonal.msl;provider=System.Data.SqlClient;provider connection string="
Data Source=АЛЕКСЕЙ-ПК;Initial Catalog=TitlePresonal;Integrated Security=True;MultipleActiveResultSets=True"" 
providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>
Александр Петров
Александр Петров

При загрузке данных из БД возникает исключение InvalidOperationException с сообщением: Элемент коллекции должен быть пустым перед использованием ItemsSource. Знаю, что для заполнения DataGrid можно использовать коллекции Items или ItemsSource, но одновременно их использовать нельзя: если задано значение для свойства ItemsSource и в коде C# добавляется элемент в Items, возникает исключение. 
Вопрос, как отследить и отключить добавление элемента в Items?

Максим Спиридонов
Максим Спиридонов

В пятой лекции на второй странице в компиляторе выскакивает ошибка в строчке :

ObjectQuery<Employee> employees = DataEntitiesEmployee.Employees;

Ошибка CS0029

Не удается неявно преобразовать тип "System.Data.Entity.DbSet<WpfApplProject.Employee>" в "System.Data.Entity.Core.Objects.ObjectQuery<WpfApplProject.Employee>".

в using прописал все как положено, здесь похоже именно с преобразованием типов проблемы