- •Лабораторна робота №1
- •Додаток з Entity Framework. Підхід Model First
- •Створення запитів в Entity Framework
- •Взаємодія з даними. Підходи Code First
- •InitializeComponent();
- •Code-First до існуючої бази даних
- •Database First
- •Visiual Studio відобразить нам схему моделі. У моєму випадку в бд є тільки одна таблиця Persons, тому на схемі відображається тільки одна сутність Person:
- •InitializeComponent();
Створення запитів в Entity Framework
Щоб ефективно працювати з Entity Framework потрібно в першу чергу знати, як виконувати запити до сховища даних з використанням EF. В Entity Framework створювати запити дуже легко, так як в основному для цього застосовуються методи LINQ, які нагадують SQL-вирази.
Спочатку виробляється загальний запит до сховища даних. У нас в базі даних є таблиця Persons для зберігання об'єктів Person. Щоб отримати всі ці об'єкти, використовуємо властивість контексту або контейнера даних: personContainer.Persons. Ця властивість Persons представляє об'єкт-колекцію DbSet і повертає об'єкт IEnumerable <T>. Тобто ми можемо отримати всі об'єкти з таблиці Persons, наприклад, таким чином:
IEnumerable<Person> people = personContainer.Persons;
string s = "";
foreach (Person p in people)
{
s = s + p.Name + '\n';
}
MessageBox.Show(s);
Таким чином, ми можемо витягти всі об'єкти з певної таблиці в базі даних.
Взаємодія з даними. Підходи Code First
Підхід Model First, передбачає створення моделі, а потім по ній генерацію бази даних. Зараз познайомимося з іншим підходом - Code First. Цей підхід передбачає опис моделі даних за допомогою одного або декількох класів. Потім вже по цих класах фреймворк може згенерувати автоматично базу даних з певною структурою.
Як правило, кожному класу даних буде відповідати своя таблиця в базі даних. Крім класів, що описують дані, у додатку можуть бути класи, які здійснюють маппінг або зіставлення між окремими класами даних і конкретними таблицями в БД.
Отже, створимо додаток, тільки тепер він буде використовувати Code First. Створимо новий проект Windows Forms. У моєму випадку проект буде називатися CodeFirst.
Після створення проекту першою справою додамо новий клас Person, який буде описувати дані:
Це звичайний клас, який містить деяку кількість властивостей. Кожна властивість потім вже буде зіставлятися з окремим стовпцем в таблиці з БД.
Треба відзначити, що Entity Framework при роботі з Code First вимагає визначення ключа елемента для створення первинного ключа в таблиці в БД. За замовчуванням при генерації БД EF в якості первинних ключів розглядатиме властивості з іменами Id або [імя_класа] Id (тобто PersonId). Якщо ж ми хочемо назвати ключове властивість інакше, то нам потрібно буде внести додаткову логіку на C#.
Тепер для взаємодії з БД нам потрібен контекст даних. Це свого роду посередник між БД і класами, що описують дані. Але, у нас за замовчуванням ще не додана бібліотека для EF. Щоб її додати, натиснемо на проект правою кнопкою миші і виберемо в контекстному меню Manage NuGet Packages ...:
Потім у вікні управління NuGet-пакетами у вікні пошуку введемо слово "Entity" і виберемо пакет власне Entity Framework і встановимо його:
Після установки пакета додамо в проект новий клас PersonContext:
По-перше, клас контексту повинен наслідуватися від класу DbContext з простору імен System.Data.Entity. У конструкторі цього класу викликається конструктор базового класу, в який передається рядок "DbConnection" - це ім'я майбутнього рядка підключення до бази даних. В принципі ми можемо не використовувати конструктор, тоді в цьому випадку рядок підключення носила б ім'я самого класу контексту даних.
І також у класі визначено одна властивість Persons, яка буде зберігати набір об'єктів Person. Через цю властивість буде здійснюватися зв'язок з таблицею об'єктів Person в БД.
Клас моделі Person і контекст даних утворюють модельну частина додатку, через яку буде здійснюватися взаємодія з БД.
Тепер займемося основним функціоналом програми. Він буде таким же, як і в першому проекті при створенні першої програми:
Для додавання використовується кнопка Add і текстове поле (для введення імені) і поле numericUpDown (для введення віку). Для перегляду всіх записів на формі буде компонент DataGridView. І для видалення призначена кнопка Delete.
Код буде практично аналогічний тому, що використовувався при підході Model-First:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.Entity;
namespace CodeFirst
{
public partial class Form1 : Form
{
PersonContext db;
public Form1()
{
