Entity Framework 6, Підходи для роботи
Підхід Code-First
Підхід Code-First, який вперше з'явився в Entity Framework 4.1, зазвичай використовується, коли у вас є вже існуюча програма, що містить модель даних. Ця модель зазвичай описується за допомогою декількох класів і коду взаємодії між цими класами. Наприклад, ви можете створити клас на ім'я Customer, який міститиме дані покупця в інтернет-магазині:
Ви можете використовувати цей клас моделі у своїй програмі без створення бази даних. Додавши додатковий код, ви могли б зберігати об'єкти цього класу, наприклад на диску у форматі XML або в пам'яті робочого процесу програми. Однак, коли ваша програма розширюється і стає великою, ці дані необхідно буде зберігати в базі даних. Ця та точка, в якій і починає працювати підхід Code-First – ви можете використовувати існуючий код для створення бази даних, не турбуючись про деталі реалізації бази даних (займеться цим Entity Framework), а ви можете сфокусувати свою увагу на коді.
Важливо, що клас, що представляє модель даних, повинен мати поле Id, яке використовуватиметься в таблиці бази даних як первинний ключ. Entity Framework автоматично знаходить таке поле за допомогою механізму рефлексії (в його імені має міститися рядок “Id”, тому поле CustomerId у прикладі вище буде автоматично використовуватися як первинний ключ.) Це обмеження можна обійти, використавши властивість із довільним ім'ям та позначене спеціальними атрибутами метаданих C#, які використовуються в Entity Framework. Тут ми їх описувати не будемо, я лише загострив свою увагу на цьому моменті, тому що він показує, що будь-які налаштування первинних та зовнішніх ключів,обмеження між таблицями тощо. при підході Code-First вказуються в моделі (тобто в керованому коді C#), та був проектуються на базу даних.
Підхід Code-First з'явився пізніше підходів Model-First та Database-First і, як ви вже зрозуміли, найбільше підходить для розробників, які хочуть писати код, а не працювати з дизайнером моделі EDM або засобами роботи з базами даних (SQL Server Management Studio та T-SQL). Ви можете створити модель для вашої програми, використовуючиоб'єкти CLR (Common Language Runtime) таспеціальні об'єкти POCO (Plain Old CLR Object).
При проектуванні програм з підходом Code-First, ви спочатку створюєте класи моделі даних, не звертаючи уваги на Entity Framework. Після того, як вам знадобилося працювати з базою даних, ви використовуєте різні інструменти, що проектують структуру бази даних із створеної моделі класів. Після цього ви можете повернутися до цієї моделі в коді та, наприклад, змінити її. Ці зміни потім можна буде відобразити в базі даних за допомогою тих самих інструментів.
Важливим нововведенням версії Entity Framework 5 у плані підходу Code-First є те, що створена модель класів тепер одразу є сутнісною моделлю даних EDM (Entity Data Model), тому відпала необхідність використовувати файл EDMX. У попередніх версіях розробнику, використовує підхід Code-First, доводилося додавати відносини між моделлю класів і файлом EDMX, тобто. відображати будь-які зміни моделі одразу у двох місцях. Очевидно, що цей підхід призводив до появи купи помилок, якщо розробник забував синхронізувати ці зміни в обох файлах.
Щоб вказати середі Visual Studio, що модель класів є моделлю EDM, потрібно по-перше встановити складання Entity Framework у проект,а по-друге додати клас контексту бази даних, успадкований від класуDbContext, що знаходиться в просторі імен System.Data.Entity, як показано в прикладі нижче (установку Entity Framework та налаштування класу контексту ми більш докладно розглядатимемо пізніше ):
Вам не потрібно турбуватися про способи взаємодії з базою даних, Entity Framework визначає низку допоміжних методів. Вам не потрібно знати деталі підключення і навіть імені бази даних. Нижче наведено приклад вставки даних у таблицю з використанням тестового класу Customer, показаного вище:
Підхід Model-First
Підхід Model-First, що вперше з'явився у версії Entity Framework 4, застосовується розробниками, які не хочуть використовувати інструменти СУБД для створення та управління базами даних, а також не хочуть вручну налаштовувати класи моделі EDM. Фактично це найпростіший підхід під час роботи з Entity Framework. Проектування моделі відбувається у графічному дизайнері EDM середовища Visual Studio. Ви могли спостерігати використання Model-First у попередній статті, де ми створили простий додаток ASP.NET.
Робочий процес створення моделі при підході Model-First починається у той момент, коли ви проектуєте базу даних. При цьому вам потрібні мінімальні знання пристрою баз даних, наприклад, для налаштування відносин між таблицями в графічному дизайнері або вказівки типів даних SQL полів таблиці.
Як і підходу Code-First, вся робота будується навколо класу контексту бази даних. Фактично, взаємодія з базою даних у цих підходах однакова. Наприклад, для вставки об'єкта використовується наступна послідовність дій:
Створити об'єкт моделі та наповнити його даними.
Створити клас контексту, успадкований від DbContext(у підході Code-First це робиться вручну, Model-First цей клас генерується автоматично разом з сутнісним класами).
Додати об'єкт до бази даних, використовуючи клас контексту.
Підхід Database-First
Підхід Database-First, що з'явився разом з Entity Framework, дозволяє писати програми для існуючих баз даних. Бази даних у реальних додатках досить швидко стають складними і намагатися створити модель для існуючої бази даних, яку можуть зрозуміти розробники досить важко. Ще важче написати код використання моделі, де відбувається взаємодія з базою даних. Багато в чому, підхід Database-First є протилежністю підходу Model-First. При підході Database-First база даних вже існує, тому розробник повинен знати, де розташована база даних, і мати інформацію про ім'я бази даних. Тим не менш, розробник не повинен розуміти внутрішню роботу бази даних - Entity Framework, як і раніше, приховує внутрішню реалізацію з поля зору.
При цьому підході робочий процес створення моделі починається зі створення та проектування бази даних. Після створення сутнісних класів моделі з існуючої бази даних, робота з Entity Framework аналогічна підходам Code-First і Model-First. Це означає створення об'єкта класу контексту та використання цього об'єкта для виконання необхідних завдань.
Сумісні з Entity Framework постачальники даних
Щоб отримати доступ до бази даних за допомогою Entity Framework, потрібно використовувати постачальники даних, сумісні з Entity Framework.Постачальники даних (data providers) організують взаємодію між сутнісним класами та системою управління базами даних (СУБД). Фактично вони відповідають за те, наприклад,який код C# потрібно згенерувати з бази даних при використанні підходу Database-First, або який код SQL потрібно створити, відображаючи графічну модель EDMX на базу даних.
Visual Studio за замовчуванням постачається постачальником данихSqlClient, що дозволяє отримати доступ до більшості версій СУБД SQL Server: 2005, 2008, 2010, 2012, 2014. Починаючи з версії Visual Studio 2010, Microsoft відмовилася від підтримки SQL Server 2 Можна також створити програму, яка звертається до SQL Server Compact. Тим не менш, цей провайдер має деякі суворі обмеження, такі як нездатність підтримувати схеми з однаковими обмеженнями.
Ви також можете отримати доступ до ряду інших постачальників даних для інших СУБД. В даний час постачальники даних Entity Framework підтримуються такими СУБД: MySQL, Oracle, Progress, VistaDB, Devart, OpenLink, Anywhere SQL, Sybase, SQLite, Synergex, Firebird і PostgreSQL (через постачальник Npgsql).
У списку провайдерів відсутня підтримка бази даних Microsoft Access. Також Entity Framework не підтримує старі технології та методи доступу, такі як Open Database Connectivity (ODBC). Щоб отримати підтримку Entity Framework для конкретної бази даних, ви можете створити EF-сумісний провайдер для неї. Докладніше про це можна прочитати у статті "EF5 Sample Provider".
Як вибрати необхідний підхід?
Це питання задає собі кожен розробник, який планує працювати з Entity Framework. У разі можна порадити дотримуватися цілей кожного з підходів. Наприклад, якщо ви запускаєте програму з нуля і у вас немає бази даних, зручніше використовувати підхід Model-First. Якщо база даних є, можна використовувати Database-First. Якщо потрібно додатипідтримку Entity Framework у вже існуючу програму, де визначено модель даних, найлогічніше використовувати підхід Code-First.
Однак, можна порадити використати підхід, зручний для розробника. Очевидно, що підхід Database-First зручний для розробників, які добре знаються на проектуванні баз даних і знають основи T-SQL, т.к. цей підхід передбачає створення бази даних вручну. Model-First найбільше підходить для архітекторів додатків, т.к. використовує зручне графічне середовище та абстрагується від реалізації бази даних та створення класів моделі. Code-First зручніший для програмістів C#, т.к. дозволяє настроювати деталі бази даних із коду.
У наступній таблиці показано зведення різних підходів для роботи з Entity Framework: