Загальні відомості про платформу entity framework
Багаторічним і загальним підходом до розробки є підхід, при якому побудова додатки або служби є його поділ на три частини: модель домену, логічну модель і фізичну модель. Модель домену визначає сутність і зв'язку в моделюється системі. Логічна модель для реляційної бази даних забезпечує нормалізацію сутностей і зв'язків з метою створення таблиць з обмеженнями зовнішнього ключа. У фізичної моделі враховуються можливості конкретної системи обробки даних шляхом визначення залежних від ядра бази даних докладних відомостей про зберігання даних, які стосуються секціонування і індексування.
Фізична модель вдосконалюється адміністраторами бази даних з метою підвищення продуктивності, але програмісти, які розробляють код додатка, в основному змушені обмежуватися роботою з логічною моделлю, готуючи SQL-запити і викликаючи збережені процедури. Моделі домену в основному використовуються як інструмент для подання та обміну думками про вимоги до додатка, тому найчастіше служать в якості практично не змінюються схем, які розглядаються і обговорюються на ранніх стадіях проекту, після чого виходять зі сфери уваги. У багатьох колективах розробників прийнято пропускати етап створення концептуальної моделі і починати з визначення таблиць, стовпців і ключів в реляційної базі даних.
Платформа Entity Framework надає значимість моделям, дозволяючи розробникам виконувати запити до сутностей і зв'язків в моделі домену (яка називається концептуальною моделлю в Entity Framework), при цьому для перекладу цих операцій в команди, які визначаються джерелом даних, використовується сама платформа Entity Framework. Це дозволяє відмовитися від застосування в додатках жорстко заданих залежностей від конкретного джерела даних.
При роботі в режимі Code First концептуальна модель порівняна з моделлю зберігання в коді. Entity Framework може вивести концептуальну модель, засновану на типах об'єктів і додаткових конфігураціях, які можна задати. Метадані зіставлення формуються під час виконання на основі поєднання визначень типів домену та додаткової інформації про конфігурацію, яка вказана в коді. Entity Framework при необхідності створює базу даних на основі метаданих. Додаткові відомості див. У розділі Створення та зіставлення концептуальної моделі.
При роботі із засобами роботи з моделлю EDM концептуальна модель, модель зберігання і зіставлення між ними виражені в схемах на основі XML і визначені в файлах з іменами з відповідними розширеннями.
Мова CSDL визначає концептуальну модель. Мова CSDL - це реалізація моделі EDM для платформи Entity Framework. Розширення файлу - CSDL.
Мова SSDL визначає модель зберігання даних, яка також називається логічною моделлю. Розширення файлу - SSDL.
Мова MSL визначає зіставлення моделі зберігання і концептуальної моделі. Розширення файлу - MSL.
Модель зберігання і зіставлення при необхідності можуть бути змінені без зміни концептуальної моделі, класів даних і коду програми. Моделі зберігання залежать від постачальника, тому можна працювати з узгодженою концептуальною моделлю через різні джерела даних.
У Entity Framework файли моделі і зіставлення служать для виконання операцій створення, читання, оновлення та видалення, виконуваних над сутностями і зв'язками концептуальної моделі, в еквівалентні операції в джерелі даних. Entity Framework підтримує навіть зіставлення сутностей в концептуальної моделі з збереженими процедурами в джерелі даних. Для отримання додаткової інформації див. Специфікації мови CSDL, SSDL і MSL.
При використанні об'єктно-орієнтованого програмування для взаємодії з системами зберігання даних виникають складності. Безумовно, організація класів часто нагадує організацію таблиць реляційної бази даних, але таке відповідність неідеально. Кілька нормалізованих таблиць часто відповідають єдиному класу, а зв'язки між класами представлені не так, як зв'язку між таблицями. Наприклад, для представлення клієнту замовлення на продаж в класі Order може використовуватися властивість, що містить посилання на екземпляр класу Customer. але рядок таблиці Order бази даних містить стовпець зовнішнього ключа (або набір стовпців) зі значенням, яке відповідає первинному ключу в таблиці Customer. Клас Customer може включати властивість з ім'ям Orders. містить колекцію примірників класу Order. але таблиця Customer бази даних не містить порівнянного стовпчика. В цьому випадку Entity Framework надає розробникам гнучкість в поданні зв'язків або більш повні зв'язку моделі (такі, як в базі даних).
В існуючих рішеннях була зроблена спроба усунути цей розрив, який часто називають «невідповідністю типів даних» (impedance mismatch), шляхом зіставлення з реляційними таблицями і стовпцями тільки об'єктно-орієнтованих класів і властивостей. Замість цього традиційного підходу в Entity Framework реляційні таблиці, стовпці і обмеження зовнішнього ключа логічних моделей перетворюються по суті і зв'язку концептуальних моделей. Це дозволяє досягти більшої гнучкості при визначенні об'єктів та оптимізації логічної моделі. За допомогою інструментів EDM (модель даних з використанням сутностей) формуються розгортаються класи даних, засновані на концептуальної моделі. Ці класи є розділяються класами, які можуть бути розширені за допомогою додаткових членів, доданих розробником. За замовчуванням класи, сформовані для певної концептуальної моделі, є похідними від базових класів, що надають служби для матеріалізації сутностей у вигляді об'єктів, а також для відстеження та збереження змін. Розробники можуть використовувати ці три класи для роботи з сутностями і зв'язками як з об'єктами, які належать до асоціацій. Розробники зможуть також налаштовувати класи, сформовані для концептуальної моделі. Додаткові відомості див. У розділі Робота з об'єктами.
Більшою мірою, ніж інші рішення об'єктно-реляційного зіставлення, Entity Framework спрямований на те, щоб давати додатків можливість читання і зміни даних, представлених у вигляді сутностей і зв'язків в концептуальної моделі. Entity Framework використовує дані в моделі і файлах зіставлення для перетворення запитів об'єктів до типам сутностей, представлених в концептуальної моделі, в запити, що залежать від джерела даних. Результати запитів перетворюються в об'єкти, якими управляють Entity Framework. Платформа Entity Framework реалізує наступні способи виконання запитів до концептуальної моделі і повернення об'єктів.
LINQ to Entities. Забезпечує підтримку запитів LINQ для виконання запитів до типам суті, які визначені в концептуальної моделі. Для отримання додаткової інформації див. LINQ to Entities.
Entity SQL. Незалежний від сховища діалект SQL, який працює безпосередньо з сутностями в концептуальної моделі і підтримує основні поняття EDM (модель даних з використанням сутностей). Entity SQL використовується і з запитами об'єктів, і з запитами, виконуваними за допомогою постачальника EntityClient. Для отримання додаткової інформації див. Загальні відомості про мову Entity SQL.
Платформа Entity Framework включає в себе постачальник даних EntityClient. Постачальник управляє сполуками, переводить запити сутностей в запити, що залежать від джерела даних, і повертає модуль читання даних, який використовується Entity Framework для матеріалізації даних сутності у вигляді об'єктів. Якщо матеріалізація об'єктів не потрібно, то постачальник EntityClient може також працювати в якості стандартного постачальника даних ADO.NET, що дозволяє додаткам виконувати запити Entity SQL і отримувати дані тільки для читання, які повертаються модулем читання даних. Для отримання додаткової інформації див. Постачальник EntityClient для платформи Entity Framework.
На таку схему показана архітектура доступу до даних Entity Framework:

Засоби EDM (модель даних з використанням сутностей) можуть сформувати клас, похідний від System.Data.Objects.ObjectContext або System.Data.Entity.DbContext. який представляє контейнер сутностей в концептуальної моделі. Контекст об'єкта надає кошти для відстеження змін і управління ідентифікаторами, паралелізмом і зв'язками. Цей клас також доступ до методу SaveChanges. який записує результати вставки, оновлення та видалення даних в джерело даних. Подібно запитам, ці зміни проводяться або командами, автоматично сформованими системою, або збереженими процедурами, зазначеними розробником.
Постачальник EntityClient розширює модель постачальника ADO.NET шляхом доступу до даних в термінах сутностей і зв'язків концептуальної моделі. Виконує запити на мові Entity SQL. Entity SQL представляє базова мова запитів, за допомогою якого EntityClient обмінюється даними з базою даних. Для отримання додаткової інформації див. Постачальник EntityClient для платформи Entity Framework.
Додаток Entity Framework включає оновлений постачальник даних SqlClient, який підтримує канонічні дерева команд. Для отримання додаткової інформації див. SqlClient для платформи Entity Framework.