
- •Лабораторна робота №1
- •Додаток з Entity Framework. Підхід Model First
- •Створення запитів в Entity Framework
- •Взаємодія з даними. Підходи Code First
- •InitializeComponent();
- •Code-First до існуючої бази даних
- •Database First
- •Visiual Studio відобразить нам схему моделі. У моєму випадку в бд є тільки одна таблиця Persons, тому на схемі відображається тільки одна сутність Person:
- •InitializeComponent();
Лабораторна робота №1
Додаток з Entity Framework. Підхід Model First
Створення запитів в Entity Framework
Взаємодія з даними. Підходи Code First
Додаток з Entity Framework. Підхід Model First
Щоб безпосередньо почати працювати з Entity Framework, створимо додаток. Для цього нам потрібна буде, по-перше, середовище розробки. В якості середовища розробки виберемо Visual Studio 2013..
Створимо простий додаток Windows Forms Application.
Створення проекту для Entity Framework 6
Тепер додамо в додаток новий елемент. Натиснемо правою кнопкою миші на проект у вікні Solution Explorer і в списку виберемо Add -> New Item. І потім у вікні додавання нового елемента виберемо ADO.NET Entity Data Model:
Entity Data Model
Оскільки модель буде описувати людину, то назвемо її Person. Натиснемо OK і нам відкриється майстер створення моделі:
Він нам пропонує дві опції: Generate from database (Створення моделі за наявною базою даних) і Empty model (Порожня модель). Так як поки у нас немає ніякої бази даних, то виберемо другу опцію. Таким чином, ми будемо застосовувати підхід Model First, тобто спочатку створювати модель, а по ній потім базу даних. Якби ми використовували підхід Database First, в цьому випадку ми б обрали першу опцію, і фреймворк нам би згенерував модель за наявною БД.
Вибравши опцію Empty Model, натиснемо кнопку Finish. Після цього перед нами відкриється порожнє вікно створення моделі.
Перетягнемо на це поле з панелі Toolbox (Панель Інструментів) в лівій частині елемент Entity. Тепер у нас на поле створення моделі є невелика схема майбутньої моделі, в якій зараз за замовчуванням зазначено лише одне поле - Id.
По-перше, перейменуємо сутність. За умовчанням вона називається Entity1. Виділимо схему і перейдемо до вікна властивостей в правому нижньому кутку:
Тут змінимо значення властивості Name на Person. Це у нас буде ім'я сутності. Воно необов'язково має збігатися з назвою моделі. І також змінимо значення властивості Entity Set Name на Persons. Це у нас буде назва набору об'єктів Person.
Далі створимо кілька властивостей. Сутність у нас буде проста та буде містити всього дві властивості для імені і віку. Отже, виділимо схему сутності і натиснемо на праву кнопку миші. У випадаючому списку виберемо Add New -> Scalar Property. Після цього буде додано нову властивість. Scalar Property увазі властивості на основі найпростіших типів int, float, string і т.д. Додамо дві властивості - Name і Age. За замовчуванням всі властивості що додаються мають тип string. Однак ми можемо змінити тип у вікні властивостей.
Таким чином, у нас повинна вийти наступна схема сутності:
Тепер згенеруємо базу даних по нашій моделі. Проте відразу звертаю увагу, що модель може містити і кілька сутностей, які можуть мати більш складні властивості і також можуть бути пов'язані між собою. Але в даному випадку для початку ми використовуємо дуже просту модель. Отже, натиснемо на неї правою кнопкою миші і в випадаючому списку виберемо Generate Database from Model (Згенерувати базу даних по моделі). Перед нами відкриється майстер створення підключення. Так як у нас поки ніяких підключень немає, виберемо New Connection (Нове підключення).
Спочатку нам треба вибрати тип джерела даних. Ми виберемо Microsoft SQL Server. І далі нам буде запропоновано налаштувати підключення і створити базу даних:
Тут нам треба ввести ім'я сервера. А також назву БД. Як ім'я бази даних введемо persondb. Натиснемо OK і потім Visual Studio згенерує нам скрипт бази даних:
Натиснемо Finish (Готово). У нас автоматично відкриється в Visual Studio файл скрипта Person.edmx.sql. І на завершення нам треба буде запустити цей скрипт. Для цього натиснемо у верхньому лівому куті на зелену кнопку Execute (Виконати):
Після цього в нижньому вікні Visual Studio нам повідомить про успішне (або неуспішному) створенні бази даних. Якщо ми відкриємо вікно Database Explorer (його можна відкрити, вибравши в меню View-> Other Windows), то ми побачимо нашу базу даних. А розкривши вузол, також побачимо, що вона містить всю ту схему, яку ми визначили в моделі:
Це все була робота по створенню моделі та бази даних. Тепер займемося самим додатком. Він буде дуже простим - буде виводити всі записи з БД, додавати в неї запис і видаляти. У фінальному варіанті додаток буде виглядати приблизно так:
Такий гранично простий і примітивний інтерфейс дозволить виконувати всі намічені вище функції: для додавання використовуватиметься кнопка Add і текстове поле (для введення імені) і поле numericUpDown (для введення віку). Для перегляду всіх записів на формі буде компонент DataGridView. І для видалення призначена ще одна кнопка Delete.
Весь код форми буде виглядати наступним чином:
Ключовим об'єктом тут є контейнер або контекст даних - PersonContainer. Клас контейнера в якості назви за замовчуванням приймає назву моделі плюс суфікс Container. Об'єкти цього класу сприймаються як сховище даних, так як через них ми можемо взаємодіяти з БД.
Клас контексту даних створюється автоматично при створенні моделі, і ми його можемо знайти в оглядачі рішень:
У моєму випадку він має наступний вигляд:
У конструкторі форми нам треба завантажити дані і виконати прив'язку до dataGridView. Для цього викликаємо метод personContainer.Persons.Load (). Так як у якості набору об'єктів Person ми вказали назву Persons, то саме його ми і використовуємо для отримання всіх об'єктів Person. Для видалення використовується метод personContainer.Persons.Remove (person), в який ми передаємо об'єкт для видалення. І додавання також робиться за допомогою одного тільки виклику методу personContainer.Persons.Add (p), в який передається об'єкт для додавання. І щоб зафіксувати всі зміни в БД, в завершенні викликається метод personContainer.SaveChanges ().
І остання річ, яку нам треба зробити - знищення контейнера, що є гарною практикою. В даному випадку у нас одна форма, але форм може бути скільки завгодно. А контейнери даних можуть завантажувати величезна кількість об'єктів, які після завершення використання чекатимуть збірку сміття. Тому рекомендується викликати для контейнера метод Dispose після того, як контейнер вже не потрібен і передбачається використовувати.
У нашому випадку у нас є один контейнер на форму. Він використовується протягом всього життєвого циклу форми, і тому знищуватися він повинен із завершенням роботи форми. У вікні Solution Explorer (Оглядач рішень) у структурі проекту ми можемо знайти файл дизайнера форми Form1.Designer.cs. Відкриємо його і знайдемо реалізацію методу Dispose форми. Він розташовується ближче до початку коду і виглядає зараз так:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Додамо в нього рядок знищення контексту даних:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
personContainer.Dispose();
base.Dispose(disposing);
}
Ось фактично все додаток, що дозволить нам переглядати, додавати і видаляти дані з простенької БД, створеної за допомогою підходу Model First.