Навігація
Головна
 
Головна arrow Інформатика arrow Проектування і розробка web-додатків
< Попередня   ЗМІСТ   Наступна >

МОДЕЛІ

Моделі являють собою прості класи, які в проекті зберігаються в папці Models. Вони описують сутності предметної області, для якої створюється web-додаток. Класи моделі в основному складаються з властивостей, які відповідають полях деякої таблиці БД, але вони можуть також мати конструктори і допоміжні методу.

Для створення файлів з моделями потрібно натиснути правою кнопкою миші на назві папки Models, вибрати команду Add => New Item і в який з'явився діалогів вікні вибрати шаблон файлу Class (рис. 4.27).

Створення файлу для опису класу Book

Мал. 4.27. Створення файлу для опису класу Book

Наприклад: для тестового додатка "Книжковий магазин" можна створити в папці Models дві моделі: клас Book (зберігається в файлі Book.cs), що описує книги і клас Purchase (зберігається в файлі Purchase.cs), що описує покупки книг (рис. 4.28) .

Опис класів-моделі Book і Purchase

Мал. 4.28. Опис класів-моделі Book і Purchase

Framework і режим "Code first"

При роботі з ASP.Net MVC і Visual Studio для взаємодії з базою даних зручно використовувати фреймворк ASP.Nct Entity Framework (EF). Цей фреймворк є об'єктно-орієнтованої технологією доступу до даних, яка виконує об'єктно-реляційне зв'язування, т. Е. Автоматичне зв'язування таблиць БД з відповідними їм класами додатки. EF дозволяє абстрагуватися від структури конкретної бази даних і вести всі операції з даними через класи моделі.

EF може працювати в різних режимах, в тому числі і в режимі "Code first", який передбачає збереження або вилучення інформації з БД на SQL Server без створення схеми бази даних або використання дизайнера в Visual Studo. Навпаки, спочатку створюються звичайні класи (з дотриманням деяких умов), a EF на їх основі створить БД з відповідною схемою (таблицями і зв'язками). Для кожного класу-моделі буде створюватися таблиця в БД. У зв'язку з цим при описі класів моделі потрібно враховувати деякі угоди.

Наприклад: т. К. Схема БД для кожної таблиці повинна мати "первинний ключ" (поле з унікальними значеннями), то його необхідно поставити в описі класу. Це можна зробити двома способами: назвати деяке властивість - ім'ям Id або <імя_моделі> ld або вказати у властивості атрибут [Кеу]. Наприклад, в описаному вище класі Book і видно, що властивість Id є первинним ключем, а в класі Purchase - властивість Purchaseld.

Для підключення моделей до БД за допомогою EF використовується клас контексту даних, похідний від класу DbContext. Він включає властивості типу DbSet <T>, де Т - це клас моделі, дані якої будуть зберігатися в БД. Наприклад, для створення контексту даних для роботи з розглянутими моделями Book і Purchase потрібно додати в папку Models новий клас BookContext, показаний на рис. 4.29.

Клас контексту даних

Мал. 4.29. Клас контексту даних

Для зв'язку контексту даних з реальною БД необхідно також описати в файлі конфігурації web.config рядок з'єднання з таким же ім'ям, як і клас контексту даних. Це робиться шляхом включаенія в файл елемента connectionStrings (відразу після елемента configSections). наприклад:

<ConnectionStrings>

<Add name-'BookContext "connectionString =

"Data Source = | DataDirectory | BookStore.sdf

providerName = "System.Data.SqlServerCe.4.07>

</ ConnectionStrings>

Тут також як і при роботі з ASP.Net Web Forms використовується підставкова рядок | DataDirectory |, яка вказує на папку, в якій буде створюватися БД (в даному випадку це також буде App_Data).

Необхідна БД буде автоматично створюватися при виконанні першого запиту за допомогою контексту даних. Для того, щоб виконати запити до БД потрібно створити екземпляр контексту даних і виконувати роботу з його властивостями типу DbSet. Приклади деяких стандартних операцій з даними показані нижче:

// створення екземпляра контексту даних

private BookContext db = new BookContext ();

// отримання з БД колекції об'єктів класу Book

var books = db.Books.ToList ();

// пошук об'єкта в контекст даних по ключу

db.Books.Find (id)

// додавання об'єкт в контекст даних

Purchase р = new Purchase ();

.... // заповнення db.Purchases.Add (p);

// зміна статусу об'єкта зміненого в контексті даних

db.Entry (book). State = EntityState. Modified:

// видалення об'єкта з контексту даних

db. Purchases.Remove (p);

// перенесення всіх змін з контексту даних в БД

db.SaveChanges ();

Заповнення БД тестовими даними

Крім створення БД Entity Framework надає можливість автоматично заносити в них тестові дані. Для цього необхідно:

  • 1) додати в папку Models новий клас-ініціалізатор даних, який включає метод Seed (), що містить код занесення тестових даних в БД;
  • 2) передати EF об'єкт класу BookDblnitializer в методі Application_Start файлу Global.asax.

Приклад класу-ініціалізатор з даними для таблиці Book, показаний на рис. 4.30.

Клас ініціалізації бази даних

Мал. 4.30. Клас ініціалізації бази даних

Такий клас-ініціалізатор може бути похідним від таких базових класів:

  • • DropCreateDatabaseAlways <клас-контексту> - для видалення і створення БД заново при кожному запуску програми;
  • • CreateDatabaselfNotExists <клас-контексту> - для створення БД якщо вона відсутня;
  • • DropCreateDatabaselfModelChanges <клас-контексту> - для видалення і створення БД заново якщо змінилася модель даних.

Для передачі об'єкта класу-ініціалізатор в EF потрібно в файлі Global.asax зробити наступні зміни:

• імпортувати простору імен:

using [імя_проекта] .Models; // наприклад: using Bookstore.Models;

using System.Data.Entity;

• передати EF об'єкт класу BookDblnitializer за допомогою методу Setlni- tializer статичного класу Database; наприклад:

Database.Setlnitializer (new BookDblnitializer ());

 
Якщо Ви помітили помилку в тексті позначте слово та натисніть Shift + Enter
< Попередня   ЗМІСТ   Наступна >
 
Дисципліни
Агропромисловість
Аудит та Бухоблік
Банківська справа
БЖД
Географія
Документознавство
Екологія
Економіка
Етика та Естетика
Журналістика
Інвестування
Інформатика
Історія
Культурологія
Література
Логіка
Логістика
Маркетинг
Медицина
Нерухомість
Менеджмент
Педагогіка
Політологія
Політекономія
Право
Природознавство
Психологія
Релігієзнавство
Риторика
Соціологія
Статистика
Техніка
Страхова справа
Товарознавство
Туризм
Філософія
Фінанси
Пошук