Начало работы с EF Core в ASP.NET Core с новой базой данныхGetting Started with EF Core on ASP.NET Core with a New database

В этом руководстве вы создадите приложение ASP.NET Core MVC, которое выполняет базовые операции доступа к данным через платформу Entity Framework Core.In this tutorial, you build an ASP.NET Core MVC application that performs basic data access using Entity Framework Core. В этом руководстве используются миграции для создания базы данных из модели данных.The tutorial uses migrations to create the database from the data model.

Вы можете выполнять это руководство с помощью Visual Studio 2017 в Windows или с помощью интерфейса командной строки .NET Core CLI в Windows, macOS или Linux.You can follow the tutorial by using Visual Studio 2017 on Windows, or by using the .NET Core CLI on Windows, macOS, or Linux.

Пример для этой статьи на GitHub:View this article's sample on GitHub:

Предварительные требованияPrerequisites

Установите следующее программное обеспечение:Install the following software:

Создание нового проектаCreate a new project

  • Откройте Visual Studio 2017.Open Visual Studio 2017
  • Последовательно выберите Файл > Создать > Проект.File > New > Project
  • В меню слева выберите Установленные > Visual C# > .NET Core.From the left menu, select Installed > Visual C# > .NET Core.
  • Выберите Новое веб-приложение ASP.NET Core.Select ASP.NET Core Web Application.
  • Введите имя проекта EFGetStarted.AspNetCore.NewDb и щелкните ОК.Enter EFGetStarted.AspNetCore.NewDb for the name and click OK.
  • В диалоговом окне Создание веб-приложения ASP.NET Core сделайте следующее.In the New ASP.NET Core Web Application dialog:
    • Выберите .NET Core и ASP.NET Core 2.1 в раскрывающихся списках.Make sure that .NET Core and ASP.NET Core 2.1 are selected in the drop-down lists
    • Выберите Web Application (Model-View-Controller) (Веб-приложение "модель — представление — контроллер").Select the Web Application (Model-View-Controller) project template
    • Убедитесь, что для параметра Проверка подлинности задано значение Без проверки подлинности.Make sure that Authentication is set to No Authentication
    • Нажмите кнопку ОК.Click OK

Предупреждение: Если для параметра Проверка подлинности установить значение Учетные записи отдельных пользователей вместо Без проверки подлинности, в проект будет добавлен файл Models\IdentityModel.cs с моделью Entity Framework Core.Warning: If you use Individual User Accounts instead of None for Authentication then an Entity Framework Core model will be added to the project in Models\IdentityModel.cs. Используя методы, представленные в этом руководстве, вы можете добавить еще одну модель или расширить уже созданную, включив в нее ваши классы сущностей.Using the techniques you learn in this tutorial, you can choose to add a second model, or extend this existing model to contain your entity classes.

Установка Entity Framework CoreInstall Entity Framework Core

Чтобы установить EF Core, установите пакеты целевых поставщиков базы данных EF Core, с которыми вы будете работать.To install EF Core, you install the package for the EF Core database provider(s) you want to target. Список доступных поставщиков см. в разделе Database Providers (Поставщики базы данных).For a list of available providers, see Database Providers.

В этом руководстве используется SQL Server, поэтому устанавливать пакет поставщиков не требуется.For this tutorial, you don't have to install a provider package because the tutorial uses SQL Server. Пакет поставщиков SQL Server включен в метапакет Microsoft.AspnetCore.App.The SQL Server provider package is included in the Microsoft.AspnetCore.App metapackage.

Создание моделиCreate the model

Задайте класс контекста и классы сущностей, составляющие модель.Define a context class and entity classes that make up the model.

  • Щелкните папку Models (Модели) правой кнопкой мыши и выберите Добавить > Класс.Right-click on the Models folder and select Add > Class.

  • Введите имя класса Model.cs и щелкните ОК.Enter Model.cs as the name and click OK.

  • Замените все содержимое этого файла следующим кодом:Replace the contents of the file with the following code:

    using Microsoft.EntityFrameworkCore;
    using System.Collections.Generic;
    
    namespace EFGetStarted.AspNetCore.NewDb.Models
    {
        public class BloggingContext : DbContext
        {
            public BloggingContext(DbContextOptions<BloggingContext> options)
                : base(options)
            { }
    
            public DbSet<Blog> Blogs { get; set; }
            public DbSet<Post> Posts { get; set; }
        }
    
        public class Blog
        {
            public int BlogId { get; set; }
            public string Url { get; set; }
    
            public ICollection<Post> Posts { get; set; }
        }
    
        public class Post
        {
            public int PostId { get; set; }
            public string Title { get; set; }
            public string Content { get; set; }
    
            public int BlogId { get; set; }
            public Blog Blog { get; set; }
        }
    }
    

Рабочее приложение обычно помещает каждый класс в отдельный файл.A production app would typically put each class in a separate file. В этом руководстве для простоты все классы помещаются в один файл.For the sake of simplicity, this tutorial puts these classes in one file.

Регистрация контекста с помощью внедрения зависимостейRegister the context with dependency injection

Чтобы сделать контекст BloggingContext доступным контроллерам MVC, зарегистрируйте его как службу в Startup.cs.To make BloggingContext available to MVC controllers, register it as a service in Startup.cs.

Службы (такие как BloggingContext) регистрируются с помощью внедрения зависимостей во время запуска приложения, чтобы компоненты, которым они требуются (например, контроллеры MVC), могли обращаться к ним автоматически через свойства и параметры конструктора.Services (such as BloggingContext) are registered with dependency injection during application startup so that they can be provided automatically to components that consume services (such as MVC controllers) via constructor parameters and properties.

  • Добавьте в файл Startup.cs следующие инструкции using:In Startup.cs add the following using statements:

    using EFGetStarted.AspNetCore.NewDb.Models;
    using Microsoft.EntityFrameworkCore;
    
  • Добавьте следующий выделенный код в метод ConfigureServices:Add the following highlighted code to the ConfigureServices method:

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });
    
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    
        var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNetCore.NewDb;Trusted_Connection=True;ConnectRetryCount=0";
        services.AddDbContext<BloggingContext>
            (options => options.UseSqlServer(connection));
        // BloggingContext requires
        // using EFGetStarted.AspNetCore.NewDb.Models;
        // UseSqlServer requires
        // using Microsoft.EntityFrameworkCore;
    }
    

В реальном рабочем приложении строка подключения обычно помещается в файл конфигурации или в переменную среды.A production app would typically put the connection string in a configuration file or environment variable. В этом руководстве для простоты она задана в коде.For the sake of simplicity, this tutorial defines it in code. Дополнительные сведения вы найдете в статье Connection Strings (Строки подключения).See Connection Strings for more information.

Создание базы данныхCreate the database

В следующих действиях используются миграции для создания базы данных.The following steps use migrations to create a database.

  • Последовательно выберите пункты Средства > Диспетчер пакетов NuGet > Консоль диспетчера пакетов.Tools > NuGet Package Manager > Package Manager Console

  • Выполните следующие команды:Run the following commands:

    Add-Migration InitialCreate
    Update-Database
    

    Если появляется сообщение об ошибке The term 'add-migration' is not recognized as the name of a cmdlet, закройте и снова откройте Visual Studio.If you get an error stating The term 'add-migration' is not recognized as the name of a cmdlet, close and reopen Visual Studio.

    Команда Add-Migration формирует шаблон миграции для создания начального набора таблиц в модели.The Add-Migration command scaffolds a migration to create the initial set of tables for the model. Команда Update-Database создает базу данных и применяет к ней созданную миграцию.The Update-Database command creates the database and applies the new migration to it.

Создание контроллераCreate a controller

Добавьте шаблон контроллера и представлений для сущности Blog.Scaffold a controller and views for the Blog entity.

  • В обозревателе решений щелкните папку Контроллеры правой кнопкой мыши и выберите пункт Добавить -> Контроллер.Right-click on the Controllers folder in Solution Explorer and select Add > Controller.
  • Выберите Контроллер MVC с представлениями, использующий Entity Framework и щелкните Добавить.Select MVC Controller with views, using Entity Framework and click Add.
  • Для параметра Класс модели установите значение Блог, а для параметра Класс контекста данныхBloggingContext.Set Model class to Blog and Data context class to BloggingContext.
  • Нажмите кнопку Добавить.Click Add.

Подсистема формирования шаблонов создает следующие файлы:The scaffolding engine creates the following files:

  • файл контроллера (Controllers/MoviesController.cs);A controller (Controllers/BlogsController.cs)
  • файлы представления Razor для страниц Create, Delete, Details, Edit и Index (Views/Blogs/*.cshtml).Razor views for Create, Delete, Details, Edit, and Index pages (Views/Blogs/*.cshtml)

Запуск приложенияRun the application

  • Отладка > Запуск без отладкиDebug > Start Without Debugging
  • Перейдите к папке /Blogs.Navigate to /Blogs

  • С помощью ссылки Create New (Создать новую запись) создайте несколько записей в блоге.Use the Create New link to create some blog entries.

    Страница "Создать"

  • Проверьте работу ссылок Details, Edit и Delete.Test the Details, Edit, and Delete links.

    Страница индексов

Дополнительные руководстваAdditional tutorials