Материал: Глава 17.3 Entity Framework

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

 

 

преподавателя из коллекции

 

 

db.ProfessorSet

 

 

 

10

}

 

 

 

 

11

}

 

 

 

 

12

buttonShowProfessors.Text = "Просмотр";

Изменение надписи кнопки

buttonShowProfessors на «Просмотр»

 

 

 

 

 

13

}

 

 

 

 

 

 

Если условие в строке 3 ложно, то

14

else if(buttonShowProfessors.Text == "Просмотр")

производится проверка на равенство надписи

кнопки buttonShowProfessors значению

 

 

 

 

"Просмотр"

 

 

 

15

{

 

 

 

 

 

this.FormProfessorInfo = new

Создание формы FormProfessorInfo и

16

передача в конструктор формы ссылки на

FormProfessorInfo(this);

 

экземпляр текущего класса (формы)

 

 

 

 

 

17

using (EntityModelContainer db = new

Создание объекта db контекста данных

EntityModelContainer())

EntityModelContainer

 

 

 

 

18

{

 

 

 

 

 

 

Цикл для обработки элементов коллекции

19

foreach (Professor professor in db.ProfessorSet)

db.ProfessorSet (коллекция сущностей

 

 

ProfessorSet из базы данных)

 

 

 

20

{

 

 

 

 

 

 

Проверка на равенство значения свойства

 

 

Name объекта professor из коллекции

21

if (professor.Name ==

db.ProfessorSet элементу, выбранному в

Convert.ToString(listBoxLecturer.SelectedItem))

списке listBoxLecturer (свойство

 

 

 

SelectedItem возвращает значение

 

 

выбранного элемента в списке)

 

 

 

 

 

Если условие в строке 21 истинно, то в

22

{

таблице ProfessorSet базы данных был

найден объект professor с именем, которое

 

 

 

 

выбрано в списке listBoxLecturer

 

 

 

23

this.FormProfessorInfo.Show();

Открытие формы FormProfessorInfo

 

 

 

24

this.FormProfessorInfo.richTextBoxName.Text =

Изменение текста элемента

professor.Name;

richTextBoxName на значение свойства

 

 

 

 

 

 

Name объекта professor (ФИО

 

 

преподавателя)

 

 

 

 

 

Изменение текста элемента

25

this.FormProfessorInfo.richTextBoxPosition.Text =

richTextBoxPosition на значение

professor.Position;

свойства Position объекта professor

 

 

 

(Должность преподавателя)

 

 

 

 

 

Изменение текста элемента

26

this.FormProfessorInfo.richTextBoxPersonalData.Text

richTextBoxPersonalData на значение

= professor.PersonalData;

свойства PersonalData объекта professor

 

 

 

(Информация «О себе» преподавателя)

 

 

 

 

 

Изменение отображаемого изображения в

 

this.FormProfessorInfo.pictureBoxPhoto.Image =

pictureBoxPhoto путем последовательного

27

(Image)((new

преобразования массива байтов, хранящихся

 

ImageConverter()).ConvertFrom(professor.Photo));

в свойстве Photo объекта professor в тип

 

 

данных Image

 

 

 

28

}}}

 

 

 

 

29

this.Visible = false;

Скрытие формы профиля студента

 

 

 

30

}}

 

 

 

 

§17.17.4 Добавление темы дипломной работы

Добавление темы происходит по нажатию кнопки Добавить в форме профиля преподавателя. Тема дипломной работы записывается в текстовое поле richTextBoxNameThesis.

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

 

Листинг 17.6 – Конструктор формы профиля преподавателя

 

 

 

1

Form1 Form1;

 

2

User User;

 

3

public FormProfessorAccount(Form1 form1, User user)

 

4

{

 

5

InitializeComponent();

 

6

this.Form1 = form1;

 

7

this.User = user;

 

8

this.UpdateListBoxTheses();

 

9

}

 

Конструктор принимает в качестве параметра ссылку на форму авторизации form1 для возможности перехода в нее обратно и ссылку на объект user, для которого будет происходить открытие профиля, и

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

При реализации добавления используем запросы LINQ.

LINQ to Entities предлагает простой и интуитивно понятный подход для получения данных с помощью выражений, которые по форме близки выражениям языка SQL.

Хотя при работе с базой данных мы оперируем запросами LINQ, но база данных понимает только запросы на языке SQL. Поэтому между LINQ to Entities и базой данных есть проводник, который позволяет им взаимодействовать. Этим проводником является провайдер EntityClient. Он создает интерфейс для взаимодействия с провайдером ADO.NET для SQL Serverа.

Для начала взаимодействия с базой данных создается объект

EntityConnection. Через объект EntityCommand он отправляет запросы, а с помощью объекта EntityDataReader считывает извлеченные из базы данных

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

Рассмотрим реализацию метода обработчика события нажатия на кнопку Добавить, которая представлена в листинге 17.7.

Листинг 17.7 – Добавление темы

1

private User User;

2

private void buttonAddThesis_Click(object sender,

EventArgs e)

 

3

{

4

using(EntityModelContainer db = new

EntityModelContainer())

 

5

{

 

Professor ModifiableProfessor =

6

(from p in db.ProfessorSet

where p.Name == User.Professor.Name

 

 

select p).FirstOrDefault();

 

Thesis thesis = new Thesis() { Name =

7

richTextBoxNameThesis.Text, Annotation =

richTextBoxNameThesis.Text, Professor =

 

 

ModifiableProfessor };

8

db.ThesisSet.Add(thesis);

9

ModifiableProfessor.Thesis.Add(thesis);

10

db.SaveChanges();

11

}

12

this.UpdateListBoxTheses();

13

}

Встроке 6 создается объект ModifiableProfessor класса Professor,

вкоторый сохраняется результат запроса LINQ на выборку. В данном запросе мы отбираем элементы p из коллекции, у которых свойство Name равно значению аналогичного свойства у объекта User.Professor. User хранит данные об объекте-пользователе, для которого открыта форма профиля. Метод

FirstOrDefault() получает первый элемент полученной выборки (в данном случае – преподавателя, для которого выполнено условие выборки). Если выборка пуста, то он возвращает значение null.

Источник: https://studfile.net/preview/16573806/