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