Добавил:
Преподаватель Колледжа информационных технологий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / Глава 17.3 Entity Framework

.pdf
Скачиваний:
48
Добавлен:
08.05.2022
Размер:
1.5 Mб
Скачать

Рисунок 17.9 – Мастер создания моделей

Окно нам предлагает четыре варианта создания модели, из которых нам надо выбрать Пустая модель конструктор в EF.

Нажмем кнопку Готово, и перед нами откроется пустое окно создания модели.

Перетащим на это поле с панели Панель Инструментов в левой части элемент Сущность. Теперь у нас на поле создания модели имеется небольшая схема будущей модели, в которой сейчас по умолчанию указано лишь одно поле - Id. Во-первых, переименуем сущность. По умолчанию она называется

Entity1.

Рисунок 17.10 – Схема модели и панель элементов

Выделим схему и перейдем к окну свойств в правом нижнем углу:

Рисунок 17.11 – Свойства сущности

Здесь изменим значение свойства Имя на User. Это у нас будет имя сущности. И также изменим значение свойства Имя набора сущностей на

Users. Это у нас будет название набора объектов User.

Далее создадим несколько свойств. Сущность у нас будет простая и будет содержать всего два свойства для логина и пароля пользователя. Итак,

выделим схему сущности и нажмем на правую кнопку мыши. В выпадающем списке выберем Добавить новый → Скалярное свойство. После этого будет добавлено новое свойство. Скалярное свойство подразумевают свойства на основе простейших типов int, float, string и т.д. Добавим три свойства –

Login, Password и Role. По умолчанию все добавляемые свойства имеют тип string. Однако мы можем изменить тип в окне свойств.

Таким образом, у нас должна получиться следующая схема сущности:

Рисунок 17.12 – Схема сущности «Пользователь»

Составим соответствующие схемы для остальных трех сущностей:

студента преподавателя и дипломной работы.

Рисунок 17.13 – Схемы сущностей «Преподаватель», «Студент» и «Дипломная работа»

Далее добавим связи между сущностями. Выберем из панели элементов объект «Ассоциация» и выберем в поле две сущности, между которыми будет установлена связь.

Рисунок 14 – Объект «Ассоциация» для установления связей»

Например, установим для начала связь между сущностями User и Student. Изменим ее вид, нажав на линию связи правой кнопкой мыши и выбрав пункт Свойства.

Рисунок 17.15 – Свойства связи

Для связи между сущностями User и Student установим вид связи «ноль-

или-один-к-одному», так как необходимо допустить возможность отсутствия

(равенство NULL) привязанной сущности Student при создании User и

наоборот. Для изменения вида связи необходимо изменить свойство

Кратность элемента на 0 (ноль из Student/ User) в обоих случаях.

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

Общий вид модели данных после установления всех связей между сущностями представлен на рисунке 17.117.

Рисунок 17.16 – Общий вид модели данных

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

Далее нам будет предложено выбрать версию EF. Выберем шестую версию:

Рисунок 17.17 – Добавление элемента создания кода

После этого в структуре проекта мы можем увидеть узел EntityModel.tt,

который в качестве подузлов будет содержать сгенерированные классы модели в файлах User.cs, Professor.cs, Thesis.cs и Student.cs:

Рисунок 17.18 – Узел с классами модели

Также здесь мы можем найти файл контекста данных

EntityModel.Context.cs, который выглядит в моем случае следующим образом:

 

Листинг 17.1 – Сгенерированный контекст данных

 

 

 

1

using System;

 

2

using System.Data.Entity;

 

3

using System.Data.Entity.Infrastructure;

 

4

public partial class EntityModelContainer : DbContext

 

5

{

 

6

public EntityModelContainer()

 

7

: base("name=EntityModelContainer"){}

8

protected override void OnModelCreating(DbModelBuilder

modelBuilder)

 

9

{

10

throw new UnintentionalCodeFirstException();

11

}

12

public virtual DbSet<User> UserSet { get; set; }

13

public virtual DbSet<Student> StudentSet { get; set; }

14

public virtual DbSet<Professor> ProfessorSet { get;

set; }

15

public virtual DbSet<Thesis> ThesisSet { get; set; }

16

}

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

Сформировать базу данных на основе модели. Перед нами откроется мастер создания подключения.

Рисунок 17.19 – Мастер создания базы данных

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

Рисунок 17.20 – Создание базы данных

Здесь нам надо указать путь, куда будет сохраняться создаваемая база данных, и указать ее имя. В качестве имени базы данных введем LR6DB.

Нажмем OK и затем Visual Studio установит в качестве подключения модели только что созданную базу данных. После этого будет сгенерирован скрипт базы данных1:

Рисунок 17.21 – DDL-скрипт для создания элементов базы данных

1 Если при генерации скрипта будет выводится ошибка, перезапустите Visual Studio

Нажмем Готово. У нас автоматически откроется в Visual Studio файл скрипта EntityModel.edmx.sql. И в завершении нам надо будет запустить этот скрипт. Для этого нажмем в верхнем левом углу на зеленую кнопку

Выполнить:

Рисунок 17.22 –Запуск скрипта

После этого в нижнем окне Visual Studio нам сообщит об успешном (или неуспешном) создании базы данных. Если мы откроем окно Обозреватель серверов (его можно открыть, выбрав в меню Вид → Другие окна), то мы увидим нашу базу данных. А раскрыв узел, также увидим, что она содержит всю ту схему, которую мы определили в модели:

Рисунок 17.23 – Обзор созданной базы данных

§17.16 Создание интерфейса приложения

§17.117.1 TableLayoutPanel

Для организации элементов управления в связанные группы существуют специальные элементы - контейнеры. Например, Panel, FlowLayoutPanel, SplitContainer, GroupBox. Ту же форму также можно отнести к контейнерам.

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

Все контейнеры имеют свойство Controls, которое содержит все элементы данного контейнера. Когда мы переносим какой-нибудь элемент с панели инструментов на контейнер, например, кнопку, она автоматически добавляется в данную коллекцию данного контейнера. Либо мы также можем добавить элемент управления динамически с помощью кода в эту же коллекцию.

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

который затем вкладываются другие элементы.

Чтобы установить нужное число строки столбцов таблицы, мы можем использовать свойства Rows и Columns соответственно. Выбрав один из этих пунктов в окне Свойства, нам отобразится следующее окно для настройки столбцов и строк: