Entity Framework

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Entity Framework
Тип Object-relational mapping
Автор Microsoft
Розробник .NET Foundation
Перший випуск 11 серпня 2008; 15 років тому (2008-08-11)
Стабільний випуск Entity Framework 6: v6.4.4
Entity Framework Core: v3.1.4 (Entity Framework 6: 22 квітня 2020; 4 роки тому (2020-04-22)[1]
Entity Framework Core: 22 квітня 2020; 4 роки тому (2020-04-22)[2])
Версії 6.4.4 (14 травня 2020)[3]
Нестабільний випуск Entity Framework Core: v5.0.0-preview.3.20181.2 (Entity Framework Core: 31 березня 2020; 4 роки тому (2020-03-31)[2])
Платформа .NET Framework, .NET
Мова програмування C#
Ліцензія Apache License 2.0
Репозиторій https://github.com/dotnet/ef6
https://github.com/dotnet/efcore
Вебсайт msdn.microsoft.com/en-us/data/ef.aspx

Entity Framework (EF) — структура об'єктно-реляційного відображення (ORM) з відкритим кодом для ADO.NET. Вона була частиною .NET Framework, але з версії 6 Entity Framework стала відокремленою від .NET Framework.

Огляд[ред. | ред. код]

Entity Framework - це набір технологій в ADO.NET, які підтримують розробку програмно-орієнтованих на дані програмних додатків.  Архітектори та розробники програм, орієнтованих на дані, зазвичай борються з необхідністю досягнення двох дуже різних цілей. Вони повинні моделювати сутності, взаємозв'язки та логіку бізнес-проблем, які вони вирішують, а також повинні працювати з движками даних, що використовуються для зберігання та отримання даних. Дані можуть охоплювати кілька систем зберігання, кожна з яких має власні протоколи; навіть програми, які працюють з єдиною системою зберігання, повинні збалансувати вимоги системи зберігання та вимоги щодо написання ефективного та ремонтопридатного коду програми.

Історія[ред. | ред. код]

Перша версія Entity Framework (EFv1) була включена в. NET Framework 3.5 з пакетом оновлень 1 та пакетом оновлень 1 для Visual Studio 2008, випущеними 11 серпня 2008 року. Ця версія була широко розкритикована, навіть залучивши "вотум недовіри", підписаний приблизно однією тисячею розробників. [4]

Друга версія Entity Framework, названа Entity Framework 4.0 (EFv4), була випущена як частина. NET 4.0 12 квітня 2010 р. Та розглянуто багато зауважень щодо версії 1. [5]

Третя версія Entity Framework, версія 4.1, була випущена 12 квітня 2011 року за підтримки Code First.

Оновлення версії 4.1 під назвою Entity Framework 4.1 Update 1 було випущено 25 липня 2011 року. Він включає виправлення помилок та нові підтримувані типи.

Версія 4.3.1 була випущена 29 лютого 2012 р. [6] Було кілька оновлень, таких як підтримка міграції.

Версія 5.0.0 була випущена 11 серпня 2012 р. [7] і призначена для. NET framework 4.5. Крім того, ця версія доступна для. Net framework 4, але без будь-яких переваг виконання під час версії 4.

Версія 6.0 була випущена 17 жовтня 2013 р. [8] і тепер є проектом з відкритим кодом, ліцензованим під ліцензією Apache v2. Як ASP. NET MVC, його вихідний код розміщений на GitHub за допомогою Git. [9] Ця версія має низку вдосконалень для підтримки першого коду . [10]


Entity Framework Core 1.0 ліцензований під ліцензією Apache v2 і повністю будується у відкритому режимі на GitHub [Архівовано 26 липня 2017 у Wayback Machine.] . Хоча Entity Framework Core 1.0 має деякі концептуальні подібності з попередніми версіями Entity Framework, це абсолютно нова кодова база, розроблена для того, щоб бути більш ефективною, потужною, гнучкою та розширюваною, працюватиме в Windows, Linux та OSX та підтримуватиме новий діапазон реляційних та NOSQL сховищ даних. [11]

Entity Framework Core 2.0 був випущений 14 серпня 2017 року разом з Visual Studio 2017 15.3 та ASP. NET Core 2.0 [12]

Entity Framework Core 3.0 був випущений 23 вересня 2019 року разом з Visual Studio 2019 16.3 та ASP. NET Core 3.0, [13]

Архітектура[ред. | ред. код]

ADO. Стек NET Entity Framework

Архітектура ADO.NET Entity Framework, знизу вгору, складається з наступного:

  • Постачальники джерел даних, які абстрагуються від ADO. NET-інтерфейсів для підключення до бази даних під час програмування за концептуальною схемою.
  • Постачальник карт, постачальник даних, що перетворює дерево команд Entity SQL у запит у власному ароматі бази даних SQL. Він включає мост для конкретного магазину, який є компонентом, відповідальним за перетворення загального дерева команд у дерево команд для конкретного магазину.
  • EDM синтаксичний аналізатор та перегляд, який приймає специфікацію SDL моделі даних та способи її відображення на базовій реляційній моделі та дозволяє програмувати проти концептуальної моделі. За допомогою реляційної схеми вона створює подання даних, що відповідають концептуальній моделі. Він об'єднує інформацію з декількох таблиць, щоб об'єднати їх в сутність, і розбиває оновлення для сутності на кілька оновлень до тієї таблиці, що внесла до цієї сутності.
  • Конвеєр запитів та оновлень, обробляє запити, фільтрує та оновлює запити, щоб перетворити їх у канонічні дерева команд, які потім перетворюються у запити, що стосуються магазину, провайдером карт.
  • Служби метаданих, які обробляють усі метадані, пов’язані з сутностями, взаємозв’язками та зіставленнями.
  • Транзакції для інтеграції з транзакційними можливостями базового магазину. Якщо базовий магазин не підтримує транзакції, підтримка для нього повинна бути реалізована на цьому рівні.
  • API концептуального рівня, час виконання, який виставляє модель програмування для кодування проти концептуальної схеми. Це слідує ADO. NET шаблон використання об'єктів Connection для посилання на постачальника карт, використання командних об'єктів для надсилання запиту та повернення EntityResultSets або EntitySets, що містять результат.
  • Відключені компоненти, які локально кешують набори даних та набори сутності для використання ADO. NET Entity Framework в інколи пов'язаному середовищі.
  • Вбудована база даних : ADO. NET Entity Framework включає легку вбудовану базу даних для кешування на стороні клієнта та запитів реляційних даних.
  • Інструменти проектування, такі як Mapping Designer, також входять до складу ADO. NET Entity Framework, що спрощує завдання зіставлення концептуальної схеми з реляційною схемою та вказівки, які властивості типу сутності відповідають якій таблиці в базі даних.
  • Рівень програмування, який виставляє EDM як конструкції програмування, які можуть використовуватися мовами програмування.
    • Об'єктні служби автоматично генерують код для класів CLR, які надають ті самі властивості, що й сутність, таким чином дозволяючи створювати екземпляри сутностей як. NET-об'єктів.
    • Вебслужби, які виставляють сутності як вебслужби.
  • Послуги високого рівня, такі як служби звітності, які працюють на сутності, а не на реляційні дані.

Модель даних сутності[ред. | ред. код]

Модель даних сутності ( EDM ) визначає концептуальну модель (CSDL) даних, використовуючи техніку моделювання, яка сама називається Entity Data Model, розширеною версією моделі сутність-взаємозв'язок. Модель даних насамперед описує Сутності та Асоціації, в яких вони беруть участь. Схема EDM виражена в мові визначення схеми (SDL), яка є додатком XML (розширена мова розмітки). Крім того, також має бути вказано відображення (MSL) елементів концептуальної схеми (CSDL) на схему зберігання (SSDL). Специфікація відображення також виражається в XML.

Visual Studio також пропонує Entity Designer для візуального створення EDM та специфікації відображення. Результатом роботи інструменту є XML-файл (* .edmx) із зазначенням схеми та відображення. Файл Edmx містить артефакти метаданих EF (вміст CSDL / MSL / SSDL). Ці три файли (csdl, msl, ssdl) також можна створювати або редагувати вручну.

Картування[ред. | ред. код]

Майстер моделей даних сутності у Visual Studio спочатку генерує співвідношення один до одного (1: 1) між схемою бази даних та концептуальною схемою у більшості випадків. У реляційній схемі елементи складаються з таблиць, при цьому первинний та зовнішній ключі склеюють відповідні таблиці. На відміну від них, Типи сутності визначають концептуальну схему даних.

Типи сутності являють собою сукупність декількох набраних полів - кожне поле відображається в певний стовпець бази даних - і може містити інформацію з декількох фізичних таблиць. Типи сутності можуть бути пов’язані між собою, незалежно від зв’язків у фізичній схемі. Пов’язані сутності також виставляються подібним чином - через поле, ім’я якого позначає відношення, у якому вони беруть участь, і доступ до якого замість отримання значення з якогось стовпця в базі даних перетинає зв’язок і повертає сутність (або колекцію сутностей) пов'язано з.

Типи сутності утворюють клас об'єктів, яким відповідають сутності, причому Сутності є екземплярами типів сутності. Суб'єкти представляють окремі об'єкти, які складають частину проблеми, що вирішується додатком, і індексуються ключем. Наприклад, перетворюючи описану вище фізичну схему, ми матимемо два типи сутності:

  • CustomerEntity, що містить ім’я клієнта з таблиці Клієнти та адресу замовника з таблиці Контакти .
  • OrderEntity, який інкапсулює замовлення певного замовника, отримуючи його з таблиці Замовлення .

Логічна схема та її відображення з фізичною схемою представлені у вигляді моделі даних сутності (EDM), вказаної як XML-файл. ADO. NET Entity Framework використовує EDM для фактичного виконання зіставлення, дозволяючи додатку працювати з сутностями, одночасно абстрагуючись від використання ADO. NET, такі як DataSet і RecordSet . ADO. NET Entity Framework виконує об'єднання, необхідні для отримання довідкової інформації сутності з декількох таблиць, або коли обв'язується зв'язок. Коли об’єкт оновлюється, він відстежує, з якої таблиці походить інформація, та видає оператори оновлення SQL для оновлення таблиць, в яких оновлено деякі дані. ADO. NET Entity Framework використовує eSQL, похідну від SQL, для виконання запитів, теоретичних операцій з наборів та оновлень сутностей та їх взаємозв’язків. Запити в eSQL, якщо потрібно, потім перекладаються на власний SQL-підхід до базової бази даних.

Типи об'єктів та набори сутностей просто формують логічну схему EDM і можуть бути виставлені як будь-що. ADO. NET Entity Framework включає Object Service, яка представляє ці сутності як Об'єкти з елементами та зв'язками, виставленими як властивості. Таким чином, об'єкти Entity є лише інтерфейсом до екземплярів типів сутності EDM, що дозволяє об'єктно-орієнтованим мовам отримувати доступ до них і використовувати їх. Подібним чином можна створити інші інтерфейси, які виставляють сутності через вебслужби (наприклад, WCF Data Services ) або XML, який використовується, коли сутності серіалізуються для постійного зберігання або бездротової передачі. [14]

Суб'єкти[ред. | ред. код]

Сутності ** - це екземпляри EntityType s; вони представляють окремі екземпляри об'єктів (наприклад, клієнта, замовлень ), до яких відноситься інформація. Ідентичність сутності визначається типом сутності, екземпляром якої вона є; у цьому сенсі тип сутності визначає клас, до якого належить сутність, а також визначає, які властивості матиме сутність. Властивості описують деякий аспект сутності, надаючи їй ім'я та тип. Властивості типу сутності в ADO. NET Entity Framework повністю набрані та повністю сумісні з системою типів, що використовується в системі СУБД, а також із загальною системою типів. NET Framework. Властивість може бути SimpleType або ComplexType, а також може бути багатозначною. Усі EntityType належать до деякого простору імен і мають властивість EntityKey, яка однозначно ідентифікує кожен екземпляр типу сутності. Різні типи властивостей розрізняють наступним чином:

  • SimpleType, відповідає примітивним типам даних, таким як цілі числа, символи та числа з плаваючою комою .
  • ComplexType - це сукупність безлічі властивостей типу SimpleType або ComplexType . На відміну від EntityType, однак, ComplexTypes не можуть мати EntityKey . В Entity Framework v1 ComplexTypes неможливо успадкувати.

Усі екземпляри сутності розміщуються в EntityContainers, які є контейнерами для кожного проекту. Кожен проект має один або кілька іменованих EntityContainers, які можуть посилатися на сутності в декількох просторах імен і типах сутності. Кілька екземплярів одного типу сутності можуть зберігатися у колекціях, які називаються EntitySets. Один тип сутності може мати кілька EntitySets.

Відносини[ред. | ред. код]

Будь-які два типи сутності можуть бути пов’язані як відношенням асоціації, так і відношенням обмеження. Наприклад, відвантаження товару клієнту є асоціацією, тоді як замовлення містить деталі замовлення - це відношення стримування. Зв'язок стримування також може бути використаний для моделювання успадкування між сутностями. Відношення між двома типами сутності задається типом відносин, екземпляри якого, які називаються відносинами, відносять екземпляри сутності. У майбутніх випусках можуть бути представлені інші типи відносин, такі як Композиція або Ідентифікація. Типи відносин характеризуються ступенем (суттєвістю) або кількістю типів сутностей, які вони пов’язують, та їх кратністю. Однак у первісному випуску ADO.NET Entity Framework відносини обмежуються двійковими (другого ступеня) двонаправленими відносинами. Кратність визначає, скільки екземплярів сутності можуть бути пов'язані між собою. На основі множинності відносини можуть бути як один до одного, один до багатьох, так і багато до багатьох.

Запит даних[ред. | ред. код]

Сутність SQL[ред. | ред. код]

ADO. NET Entity Framework використовує варіант мови структурованих запитів, названий Entity SQL, який спрямований на написання декларативних запитів та оновлення сутностей та взаємозв’язків сутності - на концептуальному рівні. Він відрізняється від SQL тим, що не має явних конструкцій для об'єднань, оскільки EDM призначений для абстрактного розподілу даних між таблицями. Запити щодо концептуальної моделі полегшуються класами EntityClient, які приймають запит Entity SQL. Конвеєр запитів аналізує запит Entity SQL у дереві команд, розподіляючи запит за кількома таблицями, який передається постачальнику EntityClient. Як ADO. Постачальники даних NET, постачальник EntityClient також ініціалізується за допомогою об’єкта Connection, який на додаток до звичайних параметрів сховища даних та інформації про автентифікацію вимагає схеми SDL та інформації зіставлення. Потім постачальник EntityClient перетворює дерево команд Entity SQL у SQL-запит у власному ароматі бази даних. Потім виконання запиту повертає Entity SQL ResultSet, який не обмежується табличною структурою, на відміну від ADO. NET ResultSets.

Сутність SQL покращує SQL, додаючи внутрішню підтримку для:

  • Типи, як ADO. NET-сутності повністю набрані.
  • EntitySets, які розглядаються як колекції сутностей.
  • Композованість, яка знімає обмеження щодо того, де можна використовувати підзапити.

LINQ[ред. | ред. код]

Постачальник LINQ to Entities дозволяє використовувати LINQ для запитів різних джерел даних СУБД. Доступні кілька постачальників послуг баз даних із підтримкою Entity Framework.

Нативний SQL[ред. | ред. код]

У Entity Framework v4 нові методи ExecuteStoreQuery () та ExecuteStoreCommand () були додані до класу ObjectContext.

Візуалізатори[ред. | ред. код]

Visual Studio має функцію під назвою Visualizer. Запит LINQ, написаний у Visual Studio, можна розглядати як власний SQL за допомогою Visualizer під час сеансу налагодження. За допомогою VisualStudioGallery [Архівовано 28 грудня 2010 у Wayback Machine.] доступний візуалізатор LINQ to Entities (запит об’єкта), націлений на всі СУБД.

Примітки[ред. | ред. код]

  1. Releases · dotnet/ef6 · GitHub. Архів оригіналу за 16 вересня 2020. Процитовано 21 жовтня 2020.
  2. а б Releases · dotnet/efcore · GitHub. Архів оригіналу за 24 березня 2021. Процитовано 21 жовтня 2020.
  3. Release 6.4.4 — 2020.
  4. ADO .NET Entity Framework Vote of No Confidence. Архів оригіналу за 26 жовтня 2020. Процитовано 21 жовтня 2020.
  5. Update on the Entity Framework in .NET 4 and Visual Studio 2010. ADO.NET team blog. 11 травня 2009. Архів оригіналу за 20 січня 2010. Процитовано 1 листопада 2011.
  6. EF4.3.1 and EF5 Beta 1 Available on NuGet. ADO.NET team blog. 29 лютого 2012. Архів оригіналу за 25 березня 2012. Процитовано 27 березня 2012.
  7. EF5 Available on CodePlex. 11 серпня 2012. Архів оригіналу за 7 вересня 2017. Процитовано 21 жовтня 2020.
  8. EF6 RTM Available. 17 жовтня 2013. Архів оригіналу за 30 березня 2014.
  9. Entity Framework - Home. 14 вересня 2016. Архів оригіналу за 10 січня 2019. Процитовано 21 жовтня 2020.
  10. EF Version History. Архів оригіналу за 4 серпня 2016. Процитовано 21 жовтня 2020.
  11. EF7 - New Platforms, New Data Stores. 19 травня 2014. Архів оригіналу за 29 вересня 2015.
  12. Announcing .NET Core 2.0. .NET Blog. 14 серпня 2017. Архів оригіналу за 21 січня 2018. Процитовано 21 жовтня 2020.
  13. Announcing .NET Core 3.0. .NET Blog. 23 вересня 2019. Архів оригіналу за 1 червня 2020. Процитовано 21 жовтня 2020.
  14. Kogent Solutions Inc. (2009), ASP.NET 3.5 Black Book, Dreamtech Press, ISBN 81-7722-831-5