dal

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

Upload: eleksdev

Post on 07-Jan-2017

2.021 views

Category:

Technology


0 download

TRANSCRIPT

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