Similar presentations:
2. Маппинг данных
1. Маппинг данных
2. Шпаргалка
DataReader – это не список и не коллекция объектов. Это потоковоечтение результата. Вы не получаете сразу готовый List<Contact>.
Вы получаете механизм, который позволяет пройти по данным
последовательно и самостоятельно построить этот список.
3. Цепочка получения данных в ADO.NET
Шаг 1. Создаёт и открывает соединение. Соединение знает, ккакому файлу SQL подключаться.
Шаг 2. Создаёт команду и помещает в неё SQL-запрос. На этом
этапе мы формулируем, какие поля и в каком порядке хотим
получить.
Шаг 3. Выполняет команду через ExecuteReader() и получает reader.
Шаг 4. В цикле while (reader.Read()) создаёт объекты C# и
заполняет их данными из текущей строки. После этого объекты
складываются, например, в List<Contact>.
4. Важный момент
DataReader связан с активным соединением и активной командой.Нельзя думать о нём как о полностью независимом объекте. Пока
вы читаете reader, соединение должно оставаться открытым.
Поэтому жизненный цикл connection, command и reader в учебных
примерах обычно расположен рядом и оборачивается в using.
5. Свойства Reader
1. Forward-only-чтение, то есть движение только вперёд. Вы нелистаете результат как список туда-сюда. Прошли строку —
возвращаться назад этим объектом уже не получится.
2. Read-only-режим. Reader предназначен именно для чтения
результата запроса. Он не редактирует строки на месте и не
является каким-то «живым объектом таблицы».
3. Легкий по памяти способ работы. Провайдер не обязан загружать
весь результат в память целиком как большую коллекцию. Поэтому
DataReader особенно хорош там, где строк может быть много.
6. Типизированные методы
Есть и второй путь – типизированные методы: GetInt32(),GetString(), GetDouble(), GetDateTime() и другие. Они работают по
индексу столбца и часто используются в более строгом и
производительном коде. Например, если Id стоит первым столбцом,
то reader.GetInt32(0) вернёт значение Id как int.
У каждого подхода свои плюсы. Имена столбцов более читаемые
для начала. Индексы и типизированные методы заставляют
дисциплинированно следить за порядком SELECT и за реальными
типами полей.
7. Пример
8. Маппинг
Маппинг – это есть процесс преобразования текущей строкирезультата в объект C#. То есть, например из набора колонок Id /
FullName / Phone / Email / Department мы собираем экземпляр
класса Contact.
Почему это так важно? Потому что остальной код приложения не
должен жить на уровне reader[«FullName»] и reader.GetString(1).
Интерфейсу, сервисам и бизнес-правилам удобнее работать с
понятным объектом: contact.FullName, contact.Email,
contact.Department. Маппинг отделяет низкоуровневую механику
чтения из БД от остальной программы.
9. Маппинг
Обратите внимание на nullability. В нашеймодели FullName логично считать
обязательным полем, поэтому оно
объявлено как string и получает безопасное
начальное значение пустой строки. А вот
Phone, Email и Department могут быть
пустыми, поэтому для них разумно
использовать string?. Это не просто
синтаксис ради современности – это
способ честно отразить в коде, что
некоторые значения в базе данных
могут отсутствовать.
10. Маппинг
\11. Практическое задание 1
Реализуйте методы GetAllContacts() и SearchByName(string name)12. Практическое задание 2
Создайте следующие таблицы:• Books с полями Title, Author, ISBN, YearPublished, TotalCopies,
AvailableCopies
• Members с полями FullName, Email, Phone, JoinDate
• Loans с полями BookId, MemberId, LoanDate, DueDate, ReturnDate
Напишите консольное приложения с меню для взаимодействия с системой
библиотеки, которое имеет функции:
• Выдача книги
• Возврат книги
• Поиск книг по автору/названию (с параметрами)
• Просмотр просроченных книг
13. Практическое задание 3
Модифицируйте код с прошлого задания.1. добавьте три модели (классы в C#, соответствующие таблицам)
2. SQL-запрос создания таблицы (если ее еще не существует
3. SQL-запрос вставки данных в таблицы.
4. Реализуйте методы
1. List GetAllBooks();
2. List GetAllMembers();
3. List GetCurrentLoans();
database