Первое приложение. Добавление моделей и базы данных

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 16.11.2019

Создадим первое простенькое приложение на ASP.NET Core MVC, которое призвано дать понимание, как работает данная платформа. Вначале создадим новый проект. Назовем его MobileStore. В качестве шаблона проекта выберем Web Application (View-Model-Controller):

Веб-сайт на ASP.NET Core MVC

Наше приложение будет очень простым и будет представлять магазин смартфонов. Какие основные функции у любого магазина - предоставлять товар на продажу и принимать заказы на товар. В связи с этим мы можем выделить прежде всего две модели: модель смартфона и модель заказа.

Итак, в проекте уже есть папка для хранения моделей - папка Models, поэтому поместим в нее новый класс, который назовем Phone и который будет представлять модель смартфона:

public class Phone
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Company { get; set; }
    public int Price { get; set; }
}

Модель телефона имеет четыре свойства: Id, название, производитель и цена.

И также добавим в папку Models новый класс, который будет представлять заказ:

public class Order
{
    public int OrderId { get; set; }
    public string User { get; set; } // имя фамилия покупателя
    public string Address { get; set; } // адрес покупателя
    public string ContactPhone { get; set; } // контактный телефон покупателя

    public int PhoneId { get; set; } // ссылка на связанную модель Phone
    public Phone Phone { get; set; }
}

Здесь все свойства довольно простые кроме двух последних. Два последних свойства вместе представляют внешний ключ на связанную модель Phone.

После определения моделей надо выбрать хранилище данных для этих моделей. Мы будем использовать MS SQL Server. Для работы с MS SQL Server компания Microsoft рекомендует использовать ORM-технологию Entity Framework, хотя ее использование необязательно. Мы также можем применять другие ORM-технологии или доступные средства ADO.NET. Преимущество фреймворка Entity Framework состоит в том, что он позволяет абстрагироваться от структуры конкретной базы данных и вести все операции с данными через модель.

В данном случае для взаимодействия с MS SQL Server через Entity Framework нам нужен пакет Microsoft.EntityFrameworkCore.SqlServer. Поэтому добавим данный пакет через пакетный менеджер NuGet:

Microsoft.EntityFrameworkCore.SqlServer

Чтобы взаимодействовать с базой данных нам нужен контекст данных. Причем Entity Framework Core использует подход Code First, при котором нам надо сначала определить модели и контекст данных, а потом уже исходя и этих моделей и класса контекста будет создаваться бд и все ее таблицы.

Поэтому добавим в папку Models новый класс, который назовем MobileContext и который будет иметь следующий код:

using Microsoft.EntityFrameworkCore;

namespace MobileStore.Models
{
    public class MobileContext : DbContext
    {
        public DbSet<Phone> Phones { get; set; }
        public DbSet<Order> Orders { get; set; }

        public MobileContext(DbContextOptions<MobileContext> options)
            : base(options)
        {
			Database.EnsureCreated();
        }
    }
}

Чтобы создать контекст, нам надо унаследовать новый класс от класса DbContext. Свойства наподобие public DbSet<Phone> Phones { get; set; } помогают получать из БД набор данных определенного типа (например, набор объектов Phone). Фактически каждое свойство DbSet будет соотноситься с отдельной таблицей в базе данных.

По умолчанию у нас база данных отсутствуют. Поэтому в конструктор MobileContext определен вызов Database.EnsureCreated(), который при отсутствии базы данных автоматически создает ее. Если база данных уже есть, то ничего не происходит.

Чтобы подключаться к базе данных, нам надо задать параметры подключения. Для этого изменим файл appsettings.json. По умолчанию он содержит только настройки логгирования:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

Теперь изменим его, добавив определение строки подключения:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=mobilestoredb;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

В данном случае мы будем использовать упрощенный движок базы данных LocalDB, который представляет легковесную версию SQL Server Express, предназначенную специально для разработки приложений. Об этом говорит параметр Server=(localdb)\\mssqllocaldb. Ну а сама база данных будет называться mobilestoredb.

И последним шагом в настройке проекта является изменение файла Startup.cs. В нем нам надо изменить метод ConfigureServices():

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using MobileStore.Models;   // пространство имен моделей
using Microsoft.EntityFrameworkCore; // пространство имен EntityFramework
using Microsoft.Extensions.Hosting;

namespace MobileStore
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            string connection = Configuration.GetConnectionString("DefaultConnection");
            services.AddDbContext<MobileContext>(options => options.UseSqlServer(connection));
            services.AddControllersWithViews();
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseDeveloperExceptionPage();
			
            app.UseStaticFiles();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850