КАК ПРОИСХОДИТ ПОДКЛЮЧЕНИЕ К БД?




Описание тестовой БД

Тестовая БД

 

 

Описание таблиц

 

Roles – список ролей

Столбец За что отвечает Тип данных Ограничения
role_id идентификатор роли int pk identity(1,1)
role_name имя роли varchar(50) not null

 

Будет 3 роли:

- Админ

- Инженер

- Заведующий кафедрой

 

TaskStatus – список статусов задач

Столбец За что отвечает Тип данных Ограничения
task_status_id идентификатор статуса задачи int pk identity(1,1)
task_status_name имя статуса задачи varchar(50) not null

 

Будут следующие статусы задач:

- Открыто (этот статус означает, что задача создана, но ещё не взята в работу)

- В работе (этот статус означает, что над задачей серьёзно работают)

- Проверка (этот статус означает, что задача находится на верификации)

- Готово (этот статус означает, что задача выполнена)

 

TaskType – список типов задач

Столбец За что отвечает Тип данных Ограничения
task_type_id идентификатор типа задачи int pk identity(1,1)
task_type_name имя типа задачи varchar(50) not null

 

Будут следующие типы задач:

- Организовать мероприятие

- Подготовить документацию

 

Employee – список статусов задач

Столбец За что отвечает Тип данных Ограничения
employee_id идентификатор сотрудника int pk identity(1,1)
fullname ФИО varchar(100) not null
birthdate Дата рождения date not null
email Электронная почта varchar(100) not null
photo Относительный путь к фото сотрудника varchar(100)  
user_login имя пользователя для входа в приложение varchar(100) not null
user_password пароль пользователя для входа в приложение varchar(100) not null
role_id идентификатор роли пользователя int fk (Role) not null
department_id идентификатор подразделения пользователя int foreign key (Department) not null

 

Department – список подразделений

Столбец За что отвечает Тип данных Ограничения
department_id идентификатор сотрудника int pk identity(1,1)
dep_name название подразделения varchar(100) not null
dep_head_id идентификатор главы подразделения int fk (Employee)

 

 

Будет всего 2 подразделения:

- Кафедра иронии

- Кафедра постиронии

 

На каждой кафедре будет создано по 3 пользователя по одному на каждую роль.

 

Task – список задач сотрудников

Столбец За что отвечает Тип данных Ограничения
task_id идентификатор задачи int pk identity(1,1)
task_type_id идентификатор типа задачи int fk (TaskType) not null
task_status_id идентификатор статуса задачи int fk (TaskStatus) not null
task_name имя задачи varchar(100) not null
task_desc описание задачи text  
creation_date дата и время создания задачи datetime not null
deadline срок выполнения задачи datetime not null
complete_date реальная дата и реальное время выполнение задачи datetime  
author_id идентификатор автора int fk (Employee) not null
performer_id идентификатор ответственного сотрудника int fk (Employee) not null
attachment Относительный путь к вложению varchar(100)  

 

Будет создано несколько задач с разным наполнением.

 

СОЗДАНИЕ ПРОЕКТА

 

 

В приложении будут следующие формы:

1) Форма входа – главная форма приложения (в проекте VisualStudio)

2) Основная форма – это как бы тоже главная форма приложения, но для нас, ибо на ней будут основные действия. Будем называть эту форму главным меню.

3) Добавление пользователя – форма добавления нового пользователя. Доступна только для пользователей с ролью «Админ».

4) Список сотрудников – форма со списком сотрудников.

 

ПОСЛЕ СОЗДАНИЯ ПРОЕКТА

 

После создания проекта мы должны скачать EF6.

 

 

 

 

 

 

 

После установки в правом блоке будет указана установленная версия

 

 

Для возможности работы с LINQ нам надо к проекту добавить ссылку на пространство имён, содержащее нужные нам классы.

 

 

 

Для организации работы с вложениями (а точнее – для получения пути, где находится exe-файл программы) мы должны подключить следующее пространство имён

 

СТРУКТУРА ПРОЕКТА

 

Она далека от идеала. Реальные приложения строятся несколько иначе.

 

1. Классы форм – в них мы описываем всё, что связано с вводом/выводом данных на формы, описываем взаимодействие пользователя и формы. В этих классах нет ничего связанного с работой с БД, с реализацией основной логики приложения. Здесь есть разве что логика, связанная с внешним видом. Всё.

 

2. Класс Logic.cs – реализация основного функционала приложения.

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

 

Методы в этом классе можно разделить на 3 группы: «основные методы» (те, в которых реализована какая-то логика (например, логика регистрации) и «методы, которые нужны для получения чего-то» (например, метод, который получает из БД и возвращает список сотрудников) и «вспомогательные методы» (это такие методы, которые нужны для реализации методов из первых двух групп).

 

3. Класс-«синглтон» UserData.cs – это публичный класс для хранения некоторой информации о текущем пользователе. Мы не реализовываем многопользовательский режим работы, мы не решаем проблемы параллельной работы с БД и т.д.

Этот класс является «синглтоном». Это означает, что данный класс будет сделан таким образом, что для него в любом случае будет создан только 1 объект. Т.к. мы работаем всегда только через одного пользователя, то нам не нужно создавать больше объектов данного класса. В нём мы будем хранить только данные текущего пользователя.

 

4. Классы модели данных – это несколько классов для каждой таблицы БД и класс контекста базы данных.

 

ГЕНЕРАЦИЯ МОДЕЛИ ДАННЫХ

 

Под генерацией модели данных в приложении понимается создание классов-сущностей (классы для таблиц в БД), создание EDMX-диаграммы (это диаграмма базы данных в Visual Studio), создание класса контекста базы данных (о нём позже).

 

Так как мы используем ORM-модель, то в приложении будут созданы классы, которые ассоциируются с реальными таблицами в базе данных.

Каждый такой класс будет сопоставляться с таблицей в БД.

Например, класс Employee будет сопоставлен с таблицей Employee.

 

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

Например, поле employee_id класса Employee будет сопоставлено с одноимённым столбцом таблицы Employee.

 

Такие классы называются классами-сущностями по понятным причинам.

 

Классы сущности можно написать самостоятельно. Но их можно и сгенерировать с помощью инструментов Visual Studio и SQL Server, если у нас уже есть база данных. А она у нас уже есть. Далее рассмотрена генерация таких классов.

 

 

 

 

 

 

 

После этого запустится процесс создания модели. Придётся немного подождать.

 

Зато после этого в самой VisualStudio будет такая красота.

 

 

КЛАССЫ-СУЩНОСТИ

 

 

Пример кода класса-сущности «Роль»:

 

 

Помимо выделенных полей класса, относящихся к столбцам таблицы «Роль», в классе есть и другие поля. Сейчас о них рассказ вестись не будет. В принципе можно сгенерировать все эти классы и «забыть». Но для более детального углубления в работу ORM-модели можно изучить эту технологию и используемый фреймворк Entity Framework 6.

 

Ещё раз.

 

 

«ГЛАВНЫЙ» КЛАСС МОДЕЛИ

 

В структуре проекта создан также класс контекста базы данных. Он называется Diana_dbEntities.

 

 

С помощью этого класса мы подключаемся к базе данных. С помощью этого класса мы обращаемся к классам-сущностям. С помощью этого класса мы выполняем SQL-запросы.

 

 

Можно заметить, что в классе есть виртуальные методы.

Подробно о них можно почитать здесь: https://metanit.com/sharp/tutorial/3.19.php

 

КАК ПРОИСХОДИТ ПОДКЛЮЧЕНИЕ К БД?

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

После генерации классов-сущностей можно найти в файле App.config (это файл с настройками проекта) следующую запись:

 

 

Здесь указывается строка подключения к БД. Она может выглядеть проще. В первом примере приложения как раз это показано. Можно и сюда такую же вставить. Но обычно то, что мы генерируем – выглядит немного сложнее, нежели то, что пишем самостоятельно.

 

Само подключение к БД осуществляется через класс контекста БД.

 

Во многих методах класса Logic.cs можно увидеть такую запись:

 

 

Переменная context – это экземпляр класса контекста БД. Она хранит свойства соединения с БД. Через неё мы работаем с таблицами. Выполняем SQL-команды.

 

Код многих методов заключён в скобки внутри блока USING.

Этот блок нужен для того, чтобы объект context, создаваемый в скобках, удалялся, когда работа с ним завершается.

 

Подробнее про using можно почитать тут: https://metanit.com/sharp/tutorial/8.5.php

 

ОПИСАНИЕ РЕАЛИЗАЦИИ

 

1. Вход пользователя

 

Схематичное описание алгоритма входа

 

 

Форма входа выглядит так:

 

 

После нажатия на кнопку «Вход» вызывается метод enterUser(string login, string password) – в этом методе реализована нарисованная выше логика. Но только при успешном входе метод возвращает true, а при неудачном – false.

 

Запросы мы пишем вот так:

 

Для написания запросов используется «технология», которая называется LINQ – это так называемый язык запросов к разным источникам данных. В том числе и к SQL-базам данных.

 

Подробнее про LINQ можно почитать здесь: https://metanit.com/sharp/tutorial/15.1.php

 

Сравнение обычного SQL-запроса и LINQ – запроса:

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-10-09 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: