2. ADO.NET (ActiveX Data Objects .NET)
• Основна модель доступу до даних для додатків, заснованих на Microsoft.Net
• Забезпечує ефективну взаємодію з поширеними типами СУБД
• Бібліотеки ADO.NET включають класи для приєднання до джерела даних,
виконання запитів і обробки їхніх результатів.
• ADO.NET можна використовувати в якості надійного, ієрархічно-організованого,
відокремленого кешу даних для автономної роботи з даними.
3. ADO.NET Data Provider
• Постачальник даних (data provider) - це набір класів ADO.NET, які дозволяють
отримувати доступ до певної базі даних, виконувати команди SQL та видавати дані.
По суті, постачальник даних - це міст між вашим додатком і джерелом даних.
• Розробники можуть створювати власні постачальники для патентованих джерел
даних.
4. ADO.NET Data Provider
• В рамках .NET Framework поставляється невеликий набір з чотирьох
постачальників:
SQL Server - Надає оптимізований доступ до баз даних SQL Server (версії 7.0 і вище).
OLE DB - Надає доступ до будь-якого джерела даних, який має драйвер OLE DB. Це
включає бази даних SQL Server версій, що передують 7.0. (Excel files)
Oracle - Надає оптимізований доступ до баз даних Oracle (версії 8 і вище).
ODBC - Надає доступ до будь-якого джерела даних, що має драйвер ODBC.
5. ADO.NET Data Provider
Основні об'єкти (класи) постачальників даних ADO.NET
• Connection - Дозволяє підключатися до сховища даних і відключатися від нього
• Command - Представляє SQL-запит або збережену процедуру
• DataReader - Надає доступ до даних тільки для читання в прямому напрямку за
допомогою курсору на стороні сервера
• Transaction - Інкапсулює транзакцію в базі даних
• Parameter - Предвставляє іменований параметр в параметризованому запиті
7. Connection string
• Standard Security
• Trusted Connection
• Connection to a SQL Server instance
• LocalDB automatic instance – на перший коннект створиться і запуститься інстанс
13. • ORM (Object Relational Mapping) - дозволяє програмісту працювати з таблицями,
полями і зв'язками реляційної БД, як з об'єктами, властивостями і колекціями.
• Технологія програмування, яка зв'язує бази даних з концепціями об'єктно-
орієнтованих мов програмування, створюючи «віртуальну об'єктну базу даних»
• Проблема “N+1” – для того щоб вибрати N обєктів з бази вам потрібно зробити, N+1
запит (Отримати всіх авторів поста – запит на N авторів + запит на отримання
обєкта поста)
ORM
14. Entity Framework являє собою спеціальну
об'єктно-орієнтовану технологію на базі
фреймворка .NET для роботи з даними.
Entity Framework
15. • Центральної концепцією Entity Framework є поняття сутності або entity.
• Сутність представляє набір даних, асоційованих з певним об'єктом. Тому дана
технологія передбачає роботу не з таблицями, а з об'єктами і їх наборами.
• В кожної сутності може бути одна або декілька властивостей, які будуть відрізняти
цю сутність від інших і будуть унікально визначати цю сутність. Подібні властивості
називають ключами.
Entity Framework
16. • Сутності можуть бути пов'язані асоціативними зв'язками один-до-багатьох, один-до-
одного і багато-до-багатьох, подібно до того, як в реальній базі даних відбувається
зв'язок через зовнішні ключі.
• Використання LINQ
Entity Framework
17. • Ця модель зіставляє класи сутностей з реальними таблицями в БД.
• Entity Data Model складається з трьох рівнів: концептуального, рівня сховища і рівня
зіставлення (маппінга).
• На концептуальному рівні відбувається визначення класів сутностей, які використовуються в
додатку.
• Рівень сховища визначає таблиці, стовпці, відносини між таблицями і типи даних, з якими
порівнюється використовувана база даних.
• Рівень зіставлення (маппінга) служить посередником між попередніми двома, визначаючи
зіставлення між властивостями класу сутності і стовпцями таблиць.
Entity Data Model
18. • Database first: Entity Framework створює набір класів, які відображають модель
конкретної бази даних.
• Model first: спочатку розробник створює модель бази даних, по якій потім Entity
Framework створює реальну базу даних на сервері.
• Code first: розробник створює клас моделі даних, які будуть зберігатися в БД, а
потім Entity Framework за цією моделлю генерує базу даних і її таблиці.
Способи взаємодії з БД
19. • Простір імен який складає основу функціональності Entity Framework
• Клас DbContext визначає контекст даних, який використовується для взаємодії з
базою даних.
• Клас DbModelBuilder зіставляє класи на мові C # з сутностями в базі даних.
• Клас DbSet / DbSet <TEntity>: представляє набір сутностей, що зберігаються в базі
даних
System.Data.Entity
20. • У будь-якому додатку, що працює з БД через Entity Framework, нам потрібен буде контекст
(клас похідний від DbContext) і набір даних DbSet, через який ми зможемо взаємодіяти з
таблицями з БД.
System.Data.Entity
21. • EF Code-First надає набір DataAnnotation атрибутів, які ви можете застосувати до доменних
класів і властивостей.
• Атрибути DataAnnotation переписують значення за замовчуванням.
• System.ComponentModel.DataAnnotations включає в себе атрибути, що впливають на
допустимість null значень або розмір стовпця.
• System.ComponentModel.DataAnnotations.Schema простір імен, який включає в себе атрибути,
які впливає на схему бази даних.
DataAnnotations in Code-First
23. System.ComponentModel.DataAnnotations
Attribute Description
Key Відзначити властивість як Entity ключ, який буде перетворений в Primary Key
відповідній таблиці
Timestamp Відзначити властивість як стовчик з ненульовою часовою міткою в базі даних.
ConcurrencyCheck ConcurrencyCheck анотація дозволяє помітити одне або кілька властивостей,
які будуть використовуватися для перевірки паралелізму в базі даних, коли
користувач редагує і видаляє об'єкт.
Required Змусить EF (і MVC) переконатись, що властивість має дані
MinLength Валідує властивість на наявність мінімальної довжини масиву або рядка
MaxLength Максимальна довжина властивості, яка в свою чергу, ставить максимальну
довжину стовпчика в базі даних
StringLength Задає мінімальну і максимальну довжину символів, дозволених в полі даних
24. System.ComponentModel.DataAnnotations.Schema
Атрибут Опис
Table Вказує ім'я таблиці БД, яке буде мапитись з класом
Column Задає ім'я стовпця і тип даних, які будуть відображені з властивістю
Index Створення індексу для зазначеного стовпця. (EF 6.1)
ForeignKey Foreign key
NotMapped Властивість не буде мапитись з базою даних
DatabaseGenerated Властивість буде відображатися на обчислюваний стовпець таблиці бази
даних. Таким чином, властивість буде доступна тільки для читання
InverseProperty Корисно, коли у вас є кілька відносин між двома класами.
ComplexType Визначає клас як комплексний тип
25. • Відкладене завантаження (lazy loading) – автоматично підвантажуються дані, але не
підвантажуються звязані дані
Завантаження звязаних даних
26. • Пряме завантаження (eager loading) - дозволяє вказати які саме звязані дані, потрібно
завантажити
Завантаження звязаних даних
27. • Явне завантаження (explicit loading) – звязані дані видобуваться тільки при явному виклику
методу Load()
Завантаження звязаних даних
28. • Узагальнений метод Select типізується сутнісним типом з класу моделі. Оскільки він є
узагальненим, то для вибірки об'єкта DbSet з класу контексту DbContext ми не можемо
використовувати властивості. Замість цього ми використовуємо допоміжний метод
DbContext.Set ().
Універсальний метод завантаження даних
var customers = Repository.Select<Customer>()
.Include(c => c.Orders)
.Where(c => c.Age > 25)
.ToList();
30. • Використовується для інкапсулювання логіки роботи з джерелами даних.
• Весь код програми за межами репозиторія працює з базою даних через нього і тільки через
нього.
Паттерн Репозиторій
32. • Робить дві важливі речі: по-перше підтримує поновлення в пам'яті і по-друге відправляє ці
оновлення в пам'яті в якості однієї транзакції в базу даних.
• Таким чином, для досягнення вищевказаних цілей вона проходить через два етапи:
• Підтримка списків бізнес-об'єктів в пам'яті, які були змінені (вставлені, оновлені або видалені)
під час транзакції.
• Після того, як транзакція буде завершена, всі ці оновлення надсилаються як один великий
блок роботи, щоб бути фізично збереженими в базі даних за один раз.
Паттерн Unit of Work