Skip to content

Створення додатка з використанням ASP.NET Core MVC і EF Core

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Завантаження...

[ Полезный рекламный блок ]

Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.


У цій статті розглянемо процес побудови реалістичного проєкту, який продемонструє спільне використання ASP.NET Core MVC і Entity Framework Core. Проєкт буде простим, але близьким до реальності, і фокусуватиметься на часто вживаних засобах Entity Framework Core.

Додаток керуватиме базою даних TV Shows, а його головна сторінка наприкінці матиме вигляд, як показано нижче.

фильмы asp.net core

У цьому проєкті я покажу альтернативні способи створення контролерів на основі «scaffolding tools». 

Створення додатка з використанням ASP.NET Core MVC і EF Core

Створення та налаштування проекту

Модель і Репозиторій

Створення бази даних

Створення першого запису

Додавання анотацій до моделі

Додавання нової властивості в модель

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

 

Створення та налаштування проекту

Щоб створити проєкт TvShows, запустіть Visual Studio і виберіть у меню File (Файл) – New Project (Створити проєкт). Вкажіть шаблон проекту ASP.NET Core Web Application (Веб-додаток ASP.NET Core). Введіть TvShows, у полі Name, на наступній сторінці вкажіть Framework .Net 7.0 і натисніть кнопку Create:

как создать проект asp.net core mvc

На даний момент у нас є початковий проект. Давайте запустимо проект (Crtl + F5), щоб переконатися, що все в порядку. Нижче ви можете змінити браузер, за допомогою якого ви хочете запустити сайт:

visual studio выбор бразуера

Після запуску ми отримуємо сторінку привітання, як показано нижче:

стартовая страница asp net mvc

MVC викликає класи контролерів (і методи дій у них) залежно від вхідного URL. Логіка маршрутизації URL, яка використовується MVC за замовчуванням, використовує такий формат, щоб визначити, який код слід викликати:

Формат маршрутизації задається у файлі Program.cs:

Коли ви переходите до застосунку і не вказуєте жодних сегментів URL, він за замовчуванням використовує контролер HomeController і метод Index, зазначений вище. Таким чином, якщо ви введете https://localhost:XXXX/Home/Index як URL-адресу, ви отримаєте ту саму сторінку привітання, яка показана вище.

Модель і Репозиторій

Модель для додатка TVShows буде заснована на списку фільмів. Для цього реалізуємо клас TvShow. Ми будемо використовувати цей клас з Entity Framework Core (EF Core) для роботи з базою даних. EF Core – це фреймворк об’єктно-реляційного відображення (ORM), який спрощує код доступу до даних. Класи моделей не мають залежності від EF Core. Вони просто визначають властивості даних, які будуть зберігатися в базі даних.

Створіть папку Models і додайте в неї файл класу на ім’я TvShow.cs з таким вмістом:

Потім додайте ще один клас під назвою Genre.cs, як показано нижче:

Далі створимо контролер і подання (частина View-Controller додатка MVC). За замовчуванням у нашому проєкті вже є контролер – HomeController.cs, видалимо його і додамо знову.

Клацніть правою кнопкою миші папку Controllers і виберіть Add -> Controller. У наступному вікні виберіть “MVC Controller with views, using Entity Framework” і натисніть Add:

создание контроллера с scaffolding

У наступному вікні виберіть TvShow як клас “Model” і натисніть знак + у класі “Data context” і дайте йому ім’я ApplicationContext. Залиште значення за замовчуванням для інших полів і виберіть – Додати:

scaffolding mvc core

Якщо під час додавання виникла помилка, з таким вмістом:

«install the package microsoft.visualstudio.web.codegeneration.design and try again»

install the package microsoft.visualstudio.web.codegeneration.design

Перейдіть у DependenciesManage NuGet PackagesBrowse і вкажіть у пошуку:

Встановіть цю бібліотеку. ВАЖЛИВО! Якщо бібліотека вже встановлена і помилка, як і раніше, виникає, спробуйте перезібрати проєкт або ж перевстановити цю бібліотеку вручну.

На цьому етапі працює інструмент scaffolding. Автоматичне створення контексту бази даних і методів та подань CRUD (create, read, update, and delete) дій відомо як scaffolding.

Розглянемо, що Visual Studio додала в наш проєкт автоматично внаслідок використання будівельних риштувань.

Наступні методи є методами дії контролера TvShowsController:

  • Index (GET) 
  • Details (GET) 
  • Create (GET & POST) 
  • Edit (GET & POST) 
  • Delete (GET & POST)

scaffolding controller in mvc

Файли подання Razor для сторінок: Створити, Видалити, Подробиці, Редагувати та Індекс, так само були створені за адресою – Views / TvShows.

Автоматично були завантажені бібліотеки, необхідні для роботи з Entity Framework Core:

ef core libraries

У корені проекту можна побачити нову папку Data, зі згенерованим класом ApplicationContext:

ApplicationContext координує функціональність EF Core (Create, Read, Update, Delete тощо) для моделі TvShow. TvShowsContext є похідним від Microsoft.EntityFrameworkCore.DbContext. Контекст даних визначає, які сутності включені в модель даних.

Ім’я рядка підключення передається в контекст шляхом виклику методу на об’єкті DbContextOptions. Для локальної розробки система конфігурації ASP.NET Core зчитує рядок підключення з файлу appsettings.json, який вже успішно згенеровано з необхідним вмістом, перейдемо до файлу і зміни назву бази даних на TvShowsDb:

ASP.NET Core побудований з використанням ін’єкції залежностей (DI). Служби (наприклад, контекст БД EF Core) реєструються за допомогою DI під час запуску програми. Компоненти, яким потрібні ці служби, отримують їх через параметри конструктора:

У контролері Controllers / TvShowsController.cs конструктор використовує впровадження залежностей для впровадження контексту бази даних (TvShowsContext) у контролер:

Створення бази даних

Створимо базу даних за допомогою функції EF Core Migrations. Міграції дає нам змогу створити базу даних, що відповідає нашій моделі даних, і оновлювати схему бази даних у разі зміни моделі даних.

Відкрийте Tools -> NuGet Package Manager > Package Manager Console (PMC) і виконайте таку команду в PMC:

Add-Migration Initial

Команда Add-Migration генерує код для створення початкової схеми бази даних, що ґрунтується на моделі, зазначеній у класі TvShowsContext. Аргумент Initial – це ім’я міграції, можна використовувати будь-яке ім’я.

Після виконання команди в папці Migrations буде створено файл міграції:

файл миграции

Як наступний крок виконайте таку команду в Package Manager Console:

Команда Update-Database запускає метод Up у файлі Migrations/{time-stamp}_InitialCreate.cs, який створює базу даних.

Тепер перевіримо створену базу даних. Відкрийте View -> Sql Server Object Explorer. Ви побачите щойно створену базу даних за таким шляхом:

миграции ef core

Як ви бачите, таблиця TvShows і таблиця історії міграцій створюються автоматично. Потім у таблицю історії міграцій вставляється запис, щоб показати виконані міграції в базі даних.

Створення першого запису

Оскільки початковий контролер HomeController було видалено, а замість нього було створено новий – TvShowsController. Необхідно трохи підправити систему маршрутизації, для цього перейдемо у файл Program.cs і змінимо початковий маршрут:

Запустіть додаток, на головній сторінці натисніть за посиланням – Create New.

Наразі список Genre, що випадає, порожній. Ми відредагуємо Create.cshtml, щоб завантажити список із перерахування Genre, як показано нижче:

Після збереження Create.cshtml, якщо оновити браузер, зміни будуть відображені, а список жанру, що випадає, завантажено. Тепер ми можемо створити перший запис. (Аналогічні зміни слід зробити і в Edit.cshtml):

asp net core create

Після натискання кнопки Create, новий запис відображається на сторінці Index, як показано нижче:

asp net core mvc crud

Тепер ми будемо показувати ImdbUrl як посилання. Змініть Views / TvShows / Index.cshtml наступним чином:

Додавання анотацій до моделі

У цьому розділі додамо анотації даних у нашу модель для цілей перевірки та відображення. Анотації даних надають вбудований набір атрибутів перевірки, які ви можете декларативно застосувати до будь-якого класу або властивості. Він також містить атрибути форматування, які допомагають у форматуванні.

Змінимо клас TvShow.cs, таким чином:

Якщо запустимо додаток і спробуємо створити новий запис, як показано нижче, ми зможемо побачити ефект від цих анотацій даних:

asp.net core annotation validation

Помилки впроваджуються як на стороні клієнта (за допомогою JavaScript і jQuery), так і на стороні сервера (у разі, якщо у користувача відключений JavaScript).

Додавання нової властивості в модель

Тепер ми додамо властивість ImageUrl у наш додаток і покажемо в записах постер телешоу. Реалізовувати завантаження зображення на сервер у цьому прикладі не станемо, обмежимося звичайним посиланням. Процес завантаження зображення на сервер розглянемо в наступних уроках.

По-перше, додамо цю властивість у модель TvShow:

Далі ми будемо використовувати Code First Migrations для додавання цього поля в таблицю db. Відкрийте Tools -> NuGet Package Manager > Package Manager Console (PMC) і виконайте таку команду в PMC:

Після, команду:

Тепер оновимо атрибут [Bind] для методів Create і Edit POST у контролері TvShowsController.cs:

Далі нам необхідно змінити подання Index, Create, Edit, щоб відобразити це нове поле.

Додайте у файл Edit.cshtml і Create.cshtml таку частину коду:

Так само, змінимо файл Index.cshtml таким чином:

У верхній частині файлу Index.cstml додамо стилів для коректного відображення постерів фільмів:

Запустіть додаток і виконайте редагування поточного запису, додавши до нього посилання на зображення, спробуйте додати новий запис. Після, перейдіть на головну сторінку і подивіться результат:

asp.net cire movie site

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

Наостанок, додамо View Component, для відображення статистики за фільмами. У корені проєкту створимо папку Components і додамо в неї новий клас StatisticsViewComponent.cs, з таким вмістом:

У методі InvokeAsync(), рахуємо загальну кількість фільмів, а також згрупувавши їх за жанрами. Як модель, передаємо в часткове подання Default.cshtml, яке ми створимо трохи пізніше.

У корені проєкту створимо папку ViewModels, у ній визначимо клас StatisticsViewModel.cs, з таким вмістом:

Тепер створимо подання, яке виводитиме передані з компонента дані. Додамо в папку Views / Shared новий каталог, який назвемо Components. А в цей каталог додамо папку, яка називається на ім’я нашого компонента – Statistics, і визначимо в ній нове подання Default.cshtml з таким вмістом:

На сторінці Index.cshtml, викличемо компонент за допомогою тег-хелпера vc:

Однак перед використанням тега необхідно зареєструвати наш компонент як tag-хелпер. Для цього у файл _ViewImports.cshtml у папці Views додамо таку директиву:

Назва збірки проекту, як правило, збігається з назвою самого проекту.

Запустимо додаток і подивимося на результат:

фильмы asp.net core

За таким принципом ви можете створювати власні компоненти для ваших веб-сайтів.

На цьому розробка проєкту з використанням технологій ASP.NET Core MVC і EF Core підійшла до кінця.

Ви можете завантажити вихідний код у моєму репозиторії — Github.

Я сподіваюся, що вам сподобалося читати цю статтю, і вона виявилася легкою для розуміння. Будь ласка, дайте мені знати, якщо у вас є якісь коментарі або виправлення.

Так само вам може бути цікава попередня стаття – Генерація robots.txt в Asp.Net.


Ви хочете навчитися писати код мовою програмування C#?

Створювати різні інформаційні системи, що складаються з сайтів, мобільних клієнтів, десктопних додатків, телеграм-ботів тощо.

Переходьте до нас на сторінку Dijix і ознайомтеся з умовами навчання, ми спеціалізуємося тільки на індивідуальних заняттях, як для початківців, так і для просунутих програмістів. Ви можете взяти як одне заняття для опрацювання питання, що вас цікавить, так і кілька, для більш щільної роботи. Завдяки особистому кабінету, кожен студент підвищить якість свого навчання, у вашому розпорядженні:

  • Доступ до пройденого матеріалу
  • Тематичні статті
  • Бібліотека книг
  • Онлайн тестування
  • Спілкування в закритих групах

https://dijix.com.ua

Живи у своєму світі, програмуй у нашому.


 

Published inAsp.Net Core
Subscribe
Notify of
guest
0 комментариев
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x