Прочитать на английском

Поделиться через


Справочник по инструментам 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.

<A list of available commands follows, omitted here.>

Использование средств

Прежде чем использовать средства, выполните следующие действия.

  • Понять разницу между целевым и запускаемым проектом.
  • Узнайте, как использовать средства с библиотеками классов .NET Standard.
  • Для ASP.NET основных проектов задайте среду.

Целевой и запускаемый проект

Команды ссылаются на проект и проект запуска.

  • Проект также называется целевым проектом, так как он содержит команды, добавляя или удаляя файлы. По умолчанию проект по умолчанию, выбранный в консоли диспетчер пакетов, является целевым проектом. Можно указать другой проект в качестве целевого -Project проекта с помощью параметра.

  • Проект запуска — это проект , который создают и запускают средства. Средства должны выполнять код приложения во время разработки для получения сведений о проекте, таких как база данных строка подключения и конфигурация модели. По умолчанию проект запуска в Обозреватель решений является запускаемым проектом. С помощью параметра можно указать другой проект в качестве запускаемого -StartupProject проекта.

Запускаемый проект и целевой проект часто являются одинаковыми. Типичный сценарий, когда они являются отдельными проектами:

  • Контекст EF Core и классы сущностей находятся в библиотеке классов .NET Core.
  • Консольное приложение .NET Core или веб-приложение ссылается на библиотеку классов.

Кроме того, можно поместить код миграции в библиотеку классов отдельно от контекста EF 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:

Параметр Описание
-Context <String> Класс DbContext для использования. Имя класса только или полное имя с пространствами имен. Если этот параметр опущен, EF Core находит класс контекста. Если существует несколько классов контекста, этот параметр является обязательным.
-Project <String> Целевой проект. Если этот параметр опущен, проект по умолчанию для консоли диспетчер пакетов используется в качестве целевого проекта.
-StartupProject <String> Запускаемый проект. Если этот параметр опущен, проект Startup в свойствах решения используется в качестве целевого проекта.
-Args <String> Аргументы, переданные приложению.
-Verbose Отображение подробных выходных данных.

Чтобы отобразить сведения о команде, используйте команду PowerShell Get-Help .

Совет

Параметр Context, Projectа также StartupProject параметры поддерживают расширение табуляции.

Миграция надстроек

Добавляет новую миграцию.

Параметры:

Параметр Описание
-Name <String> Имя миграции. Это позиционный параметр и является обязательным.
-OutputDir <String> Каталог, используемый для вывода файлов. Пути относительно целевого каталога проекта. По умолчанию используется значение "Миграции".
-Namespace <String> Пространство имен, используемое для созданных классов. По умолчанию создается из выходного каталога.

Общие параметры перечислены выше.

Миграция пакета

Создает исполняемый файл для обновления базы данных.

Параметры:

Параметр Описание
-Output <String> Путь к создаваемому исполняемому файлу.
-Force Перезаписать существующие файлы.
-SelfContained Кроме того, пакет среды выполнения .NET, поэтому его не нужно устанавливать на компьютере.
-TargetRuntime <String> Целевая среда выполнения для упаковки.
-Framework <String> Целевая платформа. По умолчанию используется первый в проекте.

Общие параметры перечислены выше.

Drop-Database

Удаляет базу данных.

Параметры:

Параметр Описание
-WhatIf Показать, какая база данных будет удалена, но не удаляйте ее.

Общие параметры перечислены выше.

Get-DbContext

Список и получение сведений о доступных DbContext типах.

Общие параметры перечислены выше.

Get-Migration

Перечисляет доступные миграции.

Параметры:

Параметр Описание
-Connection <String> Строка подключения к базе данных. Значение по умолчанию указано в AddDbContext или OnConfiguring.
-NoConnect Не подключайтесь к базе данных.

Общие параметры перечислены выше.

Optimize-DbContext

Создает скомпилированную версию модели, используемой моделью DbContext.

Дополнительные сведения см . в скомпилированных моделях .

Параметры:

Параметр Описание
-OutputDir <String> Каталог, в который нужно поместить файлы. Пути относительны к каталогу проекта.
-Namespace <String> Пространство имен, используемое для всех созданных классов. По умолчанию создается из корневого пространства имен и выходного каталога плюс CompiledModels.

Общие параметры перечислены выше.

Примечание

В настоящее время средства PMC не поддерживают создание кода, необходимого для компиляции NativeAOT и предварительно скомпилированных запросов.

В следующем примере используются значения по умолчанию и работает только в DbContext проекте:

Optimize-DbContext

В следующем примере модель оптимизирована для контекста с указанным именем и помещает ее в отдельную папку и пространство имен:

Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext

Remove-Migration

Удаляет последнюю миграцию (откат изменений кода, выполненных для миграции).

Параметры:

Параметр Описание
-Force Восстановление миграции (откат изменений, примененных к базе данных).

Общие параметры перечислены выше.

Шаблон-DbContext

Создает код для DbContext типов сущностей для базы данных. Чтобы Scaffold-DbContext создать тип сущности, таблица базы данных должна иметь первичный ключ.

Параметры:

Параметр Описание
-Connection <String> Строка подключения к базе данных. Значение может быть name=<name of строка подключения>. В этом случае имя поступает из источников конфигурации, настроенных для проекта. Это позиционный параметр и является обязательным.
-Provider <String> Используемый поставщик. Обычно это имя пакета NuGet, например: Microsoft.EntityFrameworkCore.SqlServer Это позиционный параметр и является обязательным.
-OutputDir <String> Каталог, в который нужно поместить файлы классов сущностей. Пути относительны к каталогу проекта.
-ContextDir <String> Каталог, в который нужно поместить DbContext файл. Пути относительны к каталогу проекта.
-Namespace <String> Пространство имен, используемое для всех созданных классов. По умолчанию создается из корневого пространства имен и выходного каталога.
-ContextNamespace <String> Пространство имен, используемое для созданного DbContext класса. Примечание. Переопределения -Namespace.
-Context <String> Имя создаваемого DbContext класса.
-Schemas <String[]> Схемы таблиц и представлений для создания типов сущностей. Если этот параметр опущен, все схемы включаются. Если этот параметр используется, все таблицы и представления в схемах будут включены в модель, даже если они не включены явным образом с помощью -Table.
-Tables <String[]> Таблицы и представления для создания типов сущностей. Таблицы или представления в определенной схеме можно включить с помощью формата schema.table или schema.view. Если этот параметр опущен, включены все таблицы и представления.
-DataAnnotations Используйте атрибуты для настройки модели (по возможности). Если этот параметр опущен, используется только простой API.
-UseDatabaseNames Используйте имена таблиц, представлений, последовательностей и столбцов точно так же, как они отображаются в базе данных. Если этот параметр опущен, имена баз данных изменяются на более тесное соответствие соглашениям о стиле имен C#.
-Force Перезаписать существующие файлы.
-NoOnConfiguring Не создавайте DbContext.OnConfiguring.
-NoPluralize Не используйте плюрайзер.

Общие параметры перечислены выше.

Пример:

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

В следующем примере считывается строка подключения с помощью конфигурации.

Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer

Script-DbContext

Создает скрипт SQL из DbContext. Обход любых миграций.

Параметры:

Параметр Описание
-Output <String> Файл для записи результата.

Общие параметры перечислены выше.

Скрипт-миграция

Создает скрипт SQL, который применяет все изменения из одной выбранной миграции к другой выбранной миграции.

Параметры:

Параметр Описание
-From <String> Начальная миграция. Миграции могут быть определены по имени или по идентификатору. Число 0 — это особый случай, который означает перед первой миграцией. Значение по умолчанию — 0.
-To <String> Окончание миграции. По умолчанию используется последняя миграция.
-Idempotent Создайте скрипт, который можно использовать в базе данных при любой миграции.
-NoTransactions Не создавайте инструкции транзакций SQL.
-Output <String> Файл для записи результата. Если этот параметр опущен, файл создается с созданным именем в той же папке, что и файлы среды выполнения приложения, например /obj/Debug/netcoreapp2.1/ghbkztfz.sql/.

Общие параметры перечислены выше.

Совет

Параметр To, Fromа также Output параметры поддерживают расширение табуляции.

В следующем примере создается скрипт для миграции InitialCreate (из базы данных без каких-либо миграций), используя имя миграции.

Script-Migration 0 InitialCreate

В следующем примере создается скрипт для всех миграций после миграции InitialCreate с помощью идентификатора миграции.

Script-Migration 20180904195021_InitialCreate

Update-Database

Обновляет базу данных до последней миграции или указанной миграции.

Параметр Описание
-Migration <String> Целевая миграция. Миграции могут быть определены по имени или по идентификатору. Число 0 — это особый случай, который означает перед первой миграцией и приводит к отмене всех миграций. Если миграция не указана, команда по умолчанию используется для последней миграции.
-Connection <String> Строка подключения к базе данных. По умолчанию используется один из указанных в AddDbContext или OnConfiguring.

Общие параметры перечислены выше.

Совет

Параметр Migration поддерживает расширение табуляции.

В следующем примере выполняется отмена всех миграций.

Update-Database 0

В следующих примерах база данных обновляется до указанной миграции. Первый использует имя миграции, а второй использует идентификатор миграции и указанное соединение:

Update-Database InitialCreate
Update-Database 20180904195021_InitialCreate -Connection your_connection_string

Дополнительные ресурсы