Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота1_2014.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆
  1. Створення запитів в 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);

Таким чином, ми можемо витягти всі об'єкти з певної таблиці в базі даних.

  1. Взаємодія з даними. Підходи 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()

{