Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
eleks.comeleks.com
DAL
ADO.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.DataAnnotations
Attribute 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

More Related Content

DAL

  • 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
  • 36. © Denys Prylutskyi, 2015 Практичне завдання • Розвиток курсового проекту - реалізувати DAL