DAL

36
eleks.com eleks.com DAL ADO.NET, Entity Framework 6, Repository, Unit of Work

Transcript of DAL

eleks.com eleks.com

DALADO.NET, Entity Framework 6, Repository, Unit of Work

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 - Предвставляє іменований параметр в параметризованому

запиті

ADO.NET Data Provider

Connection string

• Standard Security

• Trusted Connection

• Connection to a SQL Server instance

• LocalDB automatic instance – на перший коннект створиться і

запуститься інстанс

Command. Execute stored procedure

Command. Передача параметрів в запит

Reader. Варіант використання

eleks.com

Демонстрація 1• Робота з БД через ADO.NET

eleks.com

Переривчик 5хв

• 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

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();

eleks.com

Демонстрація 1• Використання Entity Framework

• Використовується для інкапсулювання логіки роботи з джерелами даних.

• Весь код програми за межами репозиторія працює з базою даних через нього і

тільки через нього.

Паттерн Репозиторій

Паттерн Репозиторій

• Робить дві важливі речі: по-перше підтримує поновлення в пам'яті і по-друге

відправляє ці оновлення в пам'яті в якості однієї транзакції в базу даних.

• Таким чином, для досягнення вищевказаних цілей вона проходить через два

етапи:• Підтримка списків бізнес-об'єктів в пам'яті, які були змінені (вставлені, оновлені

або видалені) під час транзакції.• Після того, як транзакція буде завершена, всі ці оновлення надсилаються як один

великий блок роботи, щоб бути фізично збереженими в базі даних за один раз.

Паттерн Unit of Work

Паттерн Unit of Work

eleks.com

Summary

eleks.com

Демонстрація 5• Events

© Denys Prylutskyi, 2015

Практичне завдання

• Розвиток курсового проекту - реалізувати DAL