Справочник по инструментам Entity Framework Core — консоль диспетчер пакетов в Visual Studio
Средства консоли диспетчер пакетов (PMC) для Entity Framework Core выполняют задачи разработки во время разработки. Например, они создают миграции, применяют миграции и создают код для модели на основе существующей базы данных. Команды выполняются внутри Visual Studio с помощью консоли диспетчер пакетов. Эти инструменты совместимы с проектами .NET Framework и .NET Core.
Если вы не используете Visual Studio, рекомендуется использовать средства командной строки EF Core. Средства командной строки .NET Core являются кроссплатформенными и выполняются в командной строке.
Установка инструментов
Установите средства консоли диспетчер пакетов, выполнив следующую команду в консоли диспетчер пакетов:
Install-Package Microsoft.EntityFrameworkCore.Tools
Обновите средства, выполнив следующую команду в консоли диспетчер пакетов.
Update-Package Microsoft.EntityFrameworkCore.Tools
Проверка установки
Убедитесь, что средства установлены, выполнив следующую команду:
Get-Help about_EntityFrameworkCore
Выходные данные выглядят следующим образом (это не указывает, какая версия инструментов, которые вы используете):
_/\__ ---==/ \\ ___ ___ |. \|\ | __|| __| | ) \\\ | _| | _| \_/ | //|\\ |___||_| / \\\/\\ TOPIC about_EntityFrameworkCore SHORT DESCRIPTION Provides information about the Entity Framework Core Package Manager Console Tools.
Использование средств
Прежде чем использовать средства, выполните следующие действия.
- Понять разницу между целевым и запускаемым проектом.
- Узнайте, как использовать средства с библиотеками классов .NET Standard.
- Для ASP.NET основных проектов задайте среду.
Целевой и запускаемый проект
Команды ссылаются на проект и проект запуска.
- Проект также называется целевым проектом , так как он содержит команды, добавляя или удаляя файлы. По умолчанию проект по умолчанию, выбранный в консоли диспетчер пакетов, является целевым проектом. Можно указать другой проект в качестве целевого проекта с помощью параметра.
- Проект запуска — это проект , который создают и запускают средства. Средства должны выполнять код приложения во время разработки для получения сведений о проекте, таких как база данных строка подключения и конфигурация модели. По умолчанию проект запуска в Обозреватель решений является запускаемым проектом. С помощью параметра можно указать другой проект в качестве запускаемого проекта.
Запускаемый проект и целевой проект часто являются одинаковыми. Типичный сценарий, когда они являются отдельными проектами:
- Контекст EF Core и классы сущностей находятся в библиотеке классов .NET Core.
- Консольное приложение .NET Core или веб-приложение ссылается на библиотеку классов.
Другие целевые платформы
Средства консоли диспетчер пакетов работают с проектами .NET Core или платформа .NET Framework. Приложения с моделью EF Core в библиотеке классов .NET Standard могут не иметь проекта .NET Core или платформа .NET Framework. Например, это верно для приложений Xamarin и универсальная платформа Windows. В таких случаях можно создать проект консольного приложения .NET Core или платформа .NET Framework, цель которого — выступать в качестве запуска проекта для инструментов. Проект может быть фиктивным проектом без реального кода— он необходим только для предоставления целевого объекта для инструментов.
Почему требуется фиктивный проект? Как упоминание ранее, средства должны выполнять код приложения во время разработки. Для этого им необходимо использовать среду выполнения .NET Core или платформа .NET Framework. Если модель EF Core находится в проекте, который предназначен для .NET Core или платформа .NET Framework, средства EF Core заимствуют среду выполнения из проекта. Они не могут сделать это, если модель EF Core находится в библиотеке классов .NET Standard. .NET Standard не является фактической реализацией .NET; Это спецификация набора API, которые должны поддерживать реализации .NET. Поэтому .NET Standard недостаточно для того, чтобы средства EF Core выполняли код приложения. Фиктивный проект, который вы создаете для запуска, предоставляет конкретную целевую платформу, в которую средства могут загружать библиотеку классов .NET Standard.
базовая среда ASP.NET
Среду для проектов ASP.NET Core можно указать в командной строке. Это и все дополнительные аргументы передаются в Program.CreateHostBuilder.
Update-Database -Args '--environment Production'
Общие параметры
В следующей таблице показаны параметры, которые являются общими для всех команд EF Core:
| Параметр | Описание |
|---|---|
| Класс DbContext для использования. Имя класса только или полное имя с пространствами имен. Если этот параметр опущен, EF Core находит класс контекста. Если существует несколько классов контекста, этот параметр является обязательным. | |
| Целевой проект. Если этот параметр опущен, проект по умолчанию для консоли диспетчер пакетов используется в качестве целевого проекта. | |
| Запускаемый проект. Если этот параметр опущен, проект Startup в свойствах решения используется в качестве целевого проекта. | |
| Аргументы, переданные приложению. | |
| -Verbose | Отображение подробных выходных данных. |
Чтобы отобразить сведения о команде, используйте команду PowerShell Get-Help .
Параметр Context , Project а также StartupProject параметры поддерживают расширение табуляции.
Миграция надстроек
Добавляет новую миграцию.
| Параметр | Описание |
|---|---|
| Имя миграции. Это позиционный параметр и является обязательным. | |
| Каталог, используемый для вывода файлов. Пути относительно целевого каталога проекта. По умолчанию используется значение «Миграции». | |
| Пространство имен, используемое для созданных классов. По умолчанию создается из выходного каталога. |
Общие параметры перечислены выше.
Миграция пакета
Создает исполняемый файл для обновления базы данных.
| Параметр | Описание |
|---|---|
| -Output | Путь к создаваемому исполняемому файлу. |
| -Force | Перезаписать существующие файлы. |
| -SelfContained | Кроме того, пакет среды выполнения .NET, поэтому его не нужно устанавливать на компьютере. |
| Целевая среда выполнения для упаковки. | |
| -Framework | Целевая платформа. По умолчанию используется первый в проекте. |
Общие параметры перечислены выше.
Drop-Database
Удаляет базу данных.
| Параметр | Описание |
|---|---|
| Показать, какая база данных будет удалена, но не удаляйте ее. |
Общие параметры перечислены выше.
Get-DbContext
Список и получение сведений о доступных DbContext типах.
Общие параметры перечислены выше.
Get-Migration
Перечисляет доступные миграции.
| Параметр | Описание |
|---|---|
| Строка подключения к базе данных. Значение по умолчанию указано в AddDbContext или OnConfiguring. | |
| Не подключайтесь к базе данных. |
Общие параметры перечислены выше.
Optimize-DbContext
Создает скомпилированную версию модели, используемой моделью DbContext .
| Параметр | Описание |
|---|---|
| Каталог, в который нужно поместить файлы. Пути относительны к каталогу проекта. | |
| Пространство имен, используемое для всех созданных классов. По умолчанию создается из корневого пространства имен и выходного каталога плюс CompiledModels . |
Общие параметры перечислены выше.
В следующем примере используются значения по умолчанию и работает только в DbContext проекте:
Optimize-DbContext
В следующем примере модель оптимизирована для контекста с указанным именем и помещает ее в отдельную папку и пространство имен:
Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext
Remove-Migration
Удаляет последнюю миграцию (откат изменений кода, выполненных для миграции).
| Параметр | Описание |
|---|---|
| Восстановление миграции (откат изменений, примененных к базе данных). |
Общие параметры перечислены выше.
Шаблон-DbContext
Создает код для DbContext типов сущностей для базы данных. Чтобы Scaffold-DbContext создать тип сущности, таблица базы данных должна иметь первичный ключ.
| Параметр | Описание |
|---|---|
| Строка подключения к базе данных. Для проектов ASP.NET Core 2.x значение может быть name= . В этом случае имя поступает из источников конфигурации, настроенных для проекта. Это позиционный параметр и является обязательным. | |
| Используемый поставщик. Обычно это имя пакета NuGet, например: Microsoft.EntityFrameworkCore.SqlServer Это позиционный параметр и является обязательным. | |
| Каталог, в который нужно поместить файлы классов сущностей. Пути относительны к каталогу проекта. | |
| Каталог, в который нужно поместить DbContext файл. Пути относительны к каталогу проекта. | |
| Пространство имен, используемое для всех созданных классов. По умолчанию создается из корневого пространства имен и выходного каталога. | |
| Пространство имен, используемое для созданного DbContext класса. Примечание. Переопределения -Namespace . | |
| Имя создаваемого DbContext класса. | |
| Схемы таблиц и представлений для создания типов сущностей. Если этот параметр опущен, все схемы включаются. Если этот параметр используется, все таблицы и представления в схемах будут включены в модель, даже если они не включены явным образом с помощью -Table. | |
| Таблицы и представления для создания типов сущностей. Таблицы или представления в определенной схеме можно включить с помощью формата schema.table или schema.view. Если этот параметр опущен, включены все таблицы и представления. | |
| Используйте атрибуты для настройки модели (по возможности). Если этот параметр опущен, используется только простой API. | |
| Используйте имена таблиц, представлений, последовательностей и столбцов точно так же, как они отображаются в базе данных. Если этот параметр опущен, имена баз данных изменяются на более тесное соответствие соглашениям о стиле имен C#. | |
| Перезаписать существующие файлы. | |
| Не создавайте DbContext.OnConfiguring . | |
| Не используйте плюрайзер. |
Общие параметры перечислены выше.
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Пример создания шаблонов только выбранных таблиц и создает контекст в отдельной папке с указанным именем и пространством имен:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext -ContextNamespace New.Namespace
В следующем примере считывается строка подключения из конфигурации проекта, возможно, задано с помощью средства Secret Manager.
Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer
Script-DbContext
Создает скрипт SQL из DbContext. Обход любых миграций.
| Параметр | Описание |
|---|---|
| Файл для записи результата. |
Общие параметры перечислены выше.
Скрипт-миграция
Создает скрипт SQL, который применяет все изменения из одной выбранной миграции к другой выбранной миграции.
| Параметр | Описание |
|---|---|
| Начальная миграция. Миграции могут быть определены по имени или по идентификатору. Число 0 — это особый случай, который означает перед первой миграцией. Значение по умолчанию — 0. | |
| Окончание миграции. По умолчанию используется последняя миграция. | |
| Создайте скрипт, который можно использовать в базе данных при любой миграции. | |
| Не создавайте инструкции транзакций SQL. | |
| Файл для записи результата. Если этот параметр опущен, файл создается с созданным именем в той же папке, что и файлы среды выполнения приложения, например /obj/Debug/netcoreapp2.1/ghbkztfz.sql/. |
Общие параметры перечислены выше.
Параметр To , From а также Output параметры поддерживают расширение табуляции.
В следующем примере создается скрипт для миграции InitialCreate (из базы данных без каких-либо миграций), используя имя миграции.
Script-Migration 0 InitialCreate
В следующем примере создается скрипт для всех миграций после миграции InitialCreate с помощью идентификатора миграции.
Script-Migration 20180904195021_InitialCreate
Update-Database
Обновления базу данных до последней миграции или на указанную миграцию.
| Параметр | Описание |
|---|---|
| Целевая миграция. Миграции могут быть определены по имени или по идентификатору. Число 0 — это особый случай, который означает перед первой миграцией и приводит к тому, что все миграции будут отменить изменения. Если миграция не указана, команда по умолчанию используется для последней миграции. | |
| Строка подключения к базе данных. По умолчанию используется один из указанных в AddDbContext или OnConfiguring . |
Общие параметры перечислены выше.
Параметр Migration поддерживает расширение табуляции.
В следующем примере отменить изменения все миграции.
Update-Database 0
В следующих примерах база данных обновляется до указанной миграции. Первый использует имя миграции, а второй использует идентификатор миграции и указанное соединение:
Update-Database InitialCreate Update-Database 20180904195021_InitialCreate -Connection your_connection_string
Дополнительные ресурсы
- Миграции
- Реконструирование
- Скомпилированные модели
Работа с базой данных
Entity Framework представляет ORM-решение, которое позволяет автоматически связать классы языка C# с таблицами в базе данных. Entity Framework Core поддерживает большинство популярных СУБД, таких как MS SQL Server, SQLite, MySQL, Postres. В данном случае мы будем работать через Entity Framework Core с базами данных в MS SQL Server.
Детально ознакомиться с работой с Entity Framework Core можно в соответствуюшем руководстве, здесь же мы сосредоточимся прежде всего на тех моментах, которые характерны для веб-приложения ASP.NET Core.
Для работы с базами данных MS SQL Server через Entity Framework Core необходим пакет Microsoft.EntityFrameworkCore.SqlServer . По умолчанию он отсутствует в проекте, поэтому его надо добавить, например, через пакетный менеджер Nuget:

Далее добавим в проект класс, которые будет представлять данные. Пусть он будет называться User и будет иметь следующий код:
public class User < public int Id < get; set; >public string Name < get; set; >= ""; // имя пользователя public int Age < get; set; >// возраст пользователя >
Этот класс представляет те объекты, которые будут храниться в базе данных.
Для взаимодействия с базой данных через Entity Framework Core необходим контекст данных — класс, унаследованный от класса Microsoft.EntityFrameworkCore.DbContext . Поэтому добавим в проект новый класс, который назовем ApplicationContext (название класса контекста произвольное):
using Microsoft.EntityFrameworkCore; public class ApplicationContext : DbContext < public DbSetUsers < get; set; >= null!; public ApplicationContext(DbContextOptions options) : base(options) < Database.EnsureCreated(); // создаем базу данных при первом обращении >protected override void OnModelCreating(ModelBuilder modelBuilder) < modelBuilder.Entity().HasData( new User < Name = "Tom", Age = 37 >, new User < Name = "Bob", Age = 41 >, new User < Name = "Sam", Age = 24 >); > >
Свойство DbSet представляет собой коллекцию объектов, которая сопоставляется с определенной таблицей в базе данных. То есть свойство Users будет представлять таблицу, в которой будут храниться объекты User.
Класс DbSet, как и другие типы, является ссылочным. А, начиная с C# 10 и .NET 6 автоматически применяется функциональность ссылочных nullable-типов. И переменные/свойства тех типов, которые не являются nullable, следует инициализировать некотором значением перед их использованием. Чтобы выйти из этой ситуации мы можем инициализировать свойство с помощью выражения null! , которое говорит, что данное свойство в принципе не будет иметь значение null. Потому что в реальности конструктор базового класса DbContext гарантирует, что все свойства типа DbSet будут инициализированы и соответственно в принципе не будут иметь значение null.
В конструкторе класса ApplicationContext через параметр options будут передаваться настройки контекста данных. А в самом конструкторе с помощью вызова Database.EnsureCreated() по определению модели будет создаваться база данных (если она отсутствует).
Кроме того, в методе OnModelCreating() настраивается некоторая начальная конфигурация модели. В частности, с помощью метода modelBuilder.Entity().HasData() в базу данных добавляются три начальных объекта
Конфигурация и строка подключения
Чтобы подключаться к базе данных, нам надо задать параметры подключения. Это можно сделать либо в коде C#, либо в файле конфигурации. Выберем второй способ. Для этого изменим файл appsettings.json . По умолчанию он содержит только настройки логгирования:
< "Logging": < "LogLevel": < "Default": "Information", "Microsoft.AspNetCore": "Warning" >>, "AllowedHosts": "*" >
Теперь изменим его, добавив определение строки подключения:
< "ConnectionStrings": < "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=applicationdb;Trusted_Connection=True;" >, "Logging": < "LogLevel": < "Default": "Information", "Microsoft.AspNetCore": "Warning" >>, "AllowedHosts": "*" >
В данном случае мы будем использовать упрощенный движок базы данных LocalDB, который представляет легковесную версию SQL Server Express, предназначенную специально для разработки приложений. Об этом говорит параметр Server=(localdb)\\mssqllocaldb . Ну а сама база данных будет называться applicationdb .
Добавление контекста данных EF Core в качестве сервиса
Контекст данных, через который идет взаимодействие с базой данных, передается в приложение в качестве сервиса через механизм внедрения зависимостей. Поэтому для работы с Entity Framework Core необходимо добавить класс контекста данных в коллекцию сервисов приложения:
using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(); // получаем строку подключения из файла конфигурации string connection = builder.Configuration.GetConnectionString("DefaultConnection"); // добавляем контекст ApplicationContext в качестве сервиса в приложение builder.Services.AddDbContext(options => options.UseSqlServer(connection)); var app = builder.Build(); app.Run();
Для использования контекста данных ему надо передать строку подключения, которая выше была определена в файл конфигурации appsettings.json. Поэтому сначала считываем строку подключения под названием «DefaultConnection»:
string connection = builder.Configuration.GetConnectionString("DefaultConnection");
Для получения строки конфигурации для объекта IConfiguration, который представляет конфигурацию, определен метод расширения GetConnectionString() , в который передается название строки подключения.
Для добавления контекста данных в качестве сервиса у объекта коллекции сервисов IServiceCollection определен метод AddDbContext() , который типизируется классом контекста данных:
builder.Services.AddDbContext(options => options.UseSqlServer(connection));
Этот метод в качестве параметра принимает делегат, который настраивает подключение. В частности, с помощью вызова options.UseSqlServer() настраивается подключение к серверу MS SQL Server, а в качестве параметра в этот вызов передается строка подключения.
Обращение к базе данных
Подключив контекст данных мы можем с его помощью обращаеться к базе данных. Например, в качестве теста получим добавляемые по умолчанию данные:
using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(); string connection = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext(options => options.UseSqlServer(connection)); var app = builder.Build(); // получение данных app.MapGet("/", (ApplicationContext db) => db.Users.ToList()); app.Run();
Поскольку контекст данных добавлен в сервисы, то мы можем его получить в обработчике конечной точки:
app.MapGet("/", (ApplicationContext db) => db.Users.ToList());
В данном случае клиенту отправляется список добавленных в БД по умолчанию объектов User в формате JSON:
Имя «EntityFrameworkCore\Add-Migration» не распознано как имя командлета
Имя «.» не распознано как имя командлета, функции, файла сценария или выполняемой программы
Всем добрый день! Только недавно начал изучать Python и начал с редактора Pycharm. Установку.
Имя «pip» не распознано как имя командлета, функции, файла сценария или выполняемой программы
ситуация следующая: я хочу научиться писать ботов в телеграмме, но вот печаль, я пользуюсь visual.
ocsetup не распознано как имя командлета
Здравствуйте! установил wincore, хочу воспользоваться командами oclist, ocsetup пишет "не.
Сообщение об ошибке «Имя. не распознано как имя командлета, функции, файла сценария. » при вызове функции
Добрый день уважемые коллеги. Написал простой скрипт который мониторит создались ли файлы с.

Conda : Имя «conda» не распознано как имя командлета, функции, файла сценария или выполняемой программы
Я вообще практически не понимаю Python. Просто мой проект требует написания на Python’e которого я.
Администратор
![]()
16559 / 13005 / 5113
Регистрация: 17.03.2014
Сообщений: 26,532
Записей в блоге: 1
vitas007, команда называется Add-Migration . В PowerShell все команды выглядят как набор слов через тире.
Добавлено через 47 секунд
Откуда вы вообще взяли команду EntityFrameworkCore\Add-Migration ?
Имя add migration не распознано как имя командлета
Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Последнее обновление: 16.11.2019
Создадим первое простенькое приложение на ASP.NET Core MVC, которое призвано дать понимание, как работает данная платформа. Вначале создадим новый проект. Назовем его MobileStore . В качестве шаблона проекта выберем Web Application (View-Model-Controller):

Наше приложение будет очень простым и будет представлять магазин смартфонов. Какие основные функции у любого магазина — предоставлять товар на продажу и принимать заказы на товар. В связи с этим мы можем выделить прежде всего две модели: модель смартфона и модель заказа.
Итак, в проекте уже есть папка для хранения моделей — папка 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:

Чтобы взаимодействовать с базой данных нам нужен контекст данных. Причем Entity Framework Core использует подход Code First, при котором нам надо сначала определить модели и контекст данных, а потом уже исходя и этих моделей и класса контекста будет создаваться бд и все ее таблицы.
Поэтому добавим в папку Models новый класс, который назовем MobileContext и который будет иметь следующий код:
using Microsoft.EntityFrameworkCore; namespace MobileStore.Models < public class MobileContext : DbContext < public DbSetPhones < get; set; >public DbSet Orders < get; set; >public MobileContext(DbContextOptions options) : base(options) < Database.EnsureCreated(); >> >
Чтобы создать контекст, нам надо унаследовать новый класс от класса DbContext . Свойства наподобие public DbSet 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(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: "//"); >); > > >