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

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

 

 

Листинг 17.28

 

 

 

 

 

Создание объекта SelectedUser для хранения

1

User SelectedUser = null;

пользователя, у которого надо изменить значения

 

 

атрибутов

 

 

 

2

using (UserContext db = new UserContext())

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

 

 

 

 

3

{

 

 

 

 

 

 

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

4

foreach (User user in db.Users)

db.Users (коллекция сущностей Users из базы

 

 

 

данных)

 

 

 

5

{

 

 

 

 

 

 

Проверка на совпадение логина пользователя

 

 

this.User, для которого выбрана опция

6

if(user.Login == this.User.Login)

изменения данных, с логином каждого

 

 

 

 

пользователя из базы данных

 

 

 

7

{

 

 

 

 

 

 

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

8

SelectedUser = user;

переменной SelectedUser ссылку на объект

 

 

 

user (найденный элемент из базы данных)

 

 

 

16

9

}

 

 

 

 

10

}

 

 

 

 

11

SelectedUser.Login = textBoxLogin.Text;

Изменение логина у найденного пользователя

 

 

 

 

12

SelectedUser.Password = textBoxPassword.Text;

Изменение пароля у найденного пользователя

 

 

 

 

 

SelectedUser.Profile.PersonalDate =

Изменение данных «О себе» у найденного

13

 

textBoxPersonalData.Text;

пользователя

 

 

 

 

 

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

14

db.SaveChanges();

данных

 

 

 

 

 

15

}

 

 

 

 

 

MessageBox.Show("Изменения сохранены",

Вывод сообщения об успешности завершения

16

 

"Сообщение");

операции

 

 

 

17

this.Visible = false;

Скрытие текущей формы

 

 

 

 

 

 

Открытие формы просмотра учетной записи

18

FormStudentAccount.Visible = true;

студента

 

 

 

 

 

При удалении надо учитывать следующее: так как объект UserProfile требует наличие объекта User и зависит от этого объекта, то при удалении связанного объекта User надо будет удалить и связанный с ним объект UserProfile,

поскольку по умолчанию у нас не предусмотрено каскадное удаление при данной связи. Если же будет удален объект

UserProfile, на объект User это никак не повлияет:

17

 

 

Листинг 17.29

 

 

 

1

using(UserContext db = new UserContext())

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

 

 

 

2

{

 

 

 

 

 

 

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

 

 

db.Users (коллекция сущностей Users из базы

3

foreach(User user in db.Users.ToList())

данных). Здесь коллекция db.Users

 

 

преобразуется из DbSet в коллекцию List с

 

 

помощью метода ToList().

 

 

 

4

{

 

 

 

 

 

 

Проверка на совпадение Id пользователя со

 

 

значением, выбранным в списке listBoxUsers.

5

if (user.Id == (string)listBoxUsers.SelectedItem)

Так как свойство SelectedItem возвращает

 

 

значение в типе данных object, необходимо

 

 

преобразование в строковый тип (string).

 

 

 

6

{

 

 

 

 

 

 

Проверка на ненулевое значение атрибута

7

if (user.Profile != null)

UserProfile у сущности User (наличие у

 

 

пользователя профиля с личными данными)

 

 

 

 

18

 

8

{

 

 

 

 

 

 

Если профиль существует, то происходит

 

 

удаление профиля с помощью метода Remove.

9

db.UserProfiles.Remove(user.Profile);

Метод Remove применяется по отношению к

коллекции UserProfiles из контекста данных и

 

 

 

 

в качестве параметра в него передается ссылка на

 

 

удаляемый объект user.Profile.

 

 

 

10

}

 

 

 

 

 

 

Удаление пользователя с помощью метода

 

 

Remove, который применяется по отношению к

11

db.Users.Remove(user);

коллекции Users из контекста данных и в

 

 

качестве параметра в него передается ссылка на

 

 

удаляемый объект user

 

 

 

12

db.SaveChanges();}}}

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

данных

 

 

 

 

 

19

§17.10 Связь один ко многим

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

Листинг 17.30

1

public class Professor

2

{

3

[Key, ForeignKey("UserProfile")]

4

public int Id { get; set; }

5

public string Name { get; set; }

6

public string Position { get; set; }

7

public string PersonalData { get; set; }

8

public virtual UserProfile UserProfile { get; set; }

9

public virtual ICollection<Thesis> Theses { get; set;

}

 

10

public Professor()

11

{

12

this.Theses = new List<Thesis>();

13

}

14

}

 

 

15

public class Thesis

16

{

17

public int Id { get; set; }

18

public string Name { get; set; }

19

public int? ProfessorId { get; set; }

20

public virtual Professor Professor { get; set; }

21

}

 

 

Обычное свойство ProfessorId и навигационное свойство Professor

будет представлять собой внешний ключ подчиненной сущности Thesis.

Таким же образом в классе Team создается навигационное свойство Players,

представляющее собой интерфейс обобщенной коллекции

ICollection<Thesis>, через которое мы можем получать предлагаемые темы дипломных работ определенного преподавателя.

20

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