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

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

Рассмотрим реализацию метода добавления предлагаемых тем в коллекцию дипломного руководителя. Создадим следующую форму для добавления и просмотра тем:

Рисунок 3

21

Реализация метода обработчика события нажатия на кнопку «Добавить»:

 

 

 

Листинг 17.31

 

 

 

 

1

Thesis thesis = null;

 

Создание объекта класса Thesis

 

 

 

 

 

 

 

2

using (UserContext db = new UserContext())

 

Подключение контекста данных UserContext

 

 

 

 

 

 

 

3

{

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

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

 

 

 

Professors из базы данных).

 

foreach (Professor professor in

 

Метод Include применяется для упреждающей

 

 

загрузки - это процесс, при котором запрос для

4

db.Professors.Include("Theses"))

 

 

 

одного типа сущности также загружает связанные

 

 

 

 

 

 

сущности в составе запроса (в данном случае

 

 

 

совместно с Professor загружается связанная

 

 

 

сущность Theses).

 

 

 

 

5

{

 

 

 

 

 

 

 

 

 

 

 

 

Проверка на совпадение имени дипломного

 

if (this.Professor.Name == professor.Name)

 

руководителя, для которого применяется

6

 

добавление новой темы, с именем каждого

 

 

 

 

 

 

 

 

дипломного руководителя из базы данных.

 

 

 

 

 

 

22

 

7

{

 

 

 

 

Если дипломный руководитель найден в базе

 

данных, то вызывается конструктор для объекта

 

thesis = new Thesis() { Name =

 

thesis (тема дипломного проекта) и происходит

8

richTextBoxTheme.Text, ProfessorId = professor.Id

инициализация его свойств. Атрибуту

 

 

};

 

ProfessorId присваивается Id объекта

 

professor, найденного в базе данных.

 

 

9

}

 

 

 

10

}

 

 

 

Добавление созданного объекта thesis в

 

коллекцию сущностей Theses из контекста

11

db.Theses.Add(thesis);

 

данных, отвечающую за хранение сущностей в

 

базе данных

foreach (Professor professor in

12db.Professors.Include("Theses"))

13{

14if (this.Professor.Name == professor.Name)

15{

23

 

 

 

 

 

 

Добавление в коллекцию Theses объекта

16

professor.Theses.Add(thesis);

professor новой темы дипломного проекта

 

 

 

 

 

 

 

thesis

 

 

 

 

 

 

 

 

 

17

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

18

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

db.SaveChanges();}

 

 

Сохранение изменений результата запроса в базе

19

 

 

 

данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Реализация метода обработчика события нажатия на кнопку «

Изменить

»:

 

 

 

 

 

 

 

 

 

Листинг 17.32

 

 

 

 

 

 

 

 

1

 

using (UserContext db = new UserContext())

 

 

 

2

 

{

 

 

 

 

 

 

3

 

foreach (Thesis thesis in db.Theses)

 

 

 

4

 

{

 

 

 

 

 

 

5

 

if (thesis.Name == (string)listBoxTheme.SelectedItem)

 

 

 

6

 

{

 

 

 

 

 

 

7

 

thesis.Name = richTextBoxEditTheme.Text;

 

 

 

8

 

}

 

 

 

 

 

 

9

 

}

 

 

 

 

 

 

10

 

db.SaveChanges();

 

 

 

 

 

11

 

}

 

 

 

 

24

При удалении объектов, связанных отношением «один-ко-многим» нам надо учитывать то, что по умолчанию даже если внешний ключ допускает значение null (как в данном случае свойство ProfessorId в классе Thesis),

мы не сможем просто так удалить одну модель, если она имеет ссылки на другую модель. Например, удаление дипломного руководителя в данном случае приведет к ошибке, если какой-нибудь объект Professor имеет ссылку на эту дипломный проект. В этом случае нам надо установить для внешнего ключа ProfessorId в таблице дипломных проектов ограничение

ON DELETE SET NULL. Данное ограничение позволит при удалении связанного объекта устанавливать для внешнего ключа значение null.

25

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