Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Средства консоли диспетчера пакетов (PMC) для Entity Framework Core выполняют задачи проектирования во время разработки. Например, они создают миграции, применяют миграции и создают код для модели на основе существующей базы данных. Команды выполняются внутри Visual Studio с помощью консоли диспетчер пакетов. Эти средства работают как с проектами .NET Framework, так и с .NET.
Если вы не используете Visual Studio, рекомендуется использовать средства командной строки EF Core. Средства командной строки .NET являются кроссплатформенными и выполняются в командной строке.
Warning
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Установка средств
Установите средства консоли диспетчер пакетов, выполнив следующую команду в консоли диспетчер пакетов:
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.
- Консольное приложение .NET или веб-приложение ссылается на библиотеку классов.
Кроме того, можно поместить код миграции в библиотеку классов отдельно от контекста EF Core.
Другие целевые платформы
Средства консоли диспетчера пакетов работают с проектами .NET или .NET Framework. Приложения с моделью EF Core в библиотеке классов .NET Standard могут не иметь проекта .NET или .NET Framework. Например, это верно для приложений Xamarin и Универсальная платформа Windows. В таких случаях можно создать проект консольного приложения .NET или .NET Framework, цель которого — выступать в качестве стартового проекта для инструментов. Проект может быть фиктивным проектом без реального кода— он необходим только для предоставления целевого объекта для инструментов.
Important
Xamarin.Android, Xamarin.iOS, Xamarin.Mac теперь интегрированы непосредственно в .NET (начиная с .NET 6) в качестве .NET для Android, .NET для iOS и .NET для macOS. Если вы создаете эти типы проектов сегодня, они должны быть обновлены до проектов в стиле пакета SDK для .NET для продолжения поддержки. Дополнительные сведения об обновлении проектов Xamarin до .NET см. в документации по обновлению с Xamarin до .NET & .NET MAUI.
Почему требуется фиктивный проект? Как упоминалось ранее, средства должны выполнять код приложения во время разработки. Для этого им необходимо использовать среду выполнения .NET или .NET Framework. Если модель EF Core находится в проекте, предназначенном для .NET или .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:
| Parameter | Description |
|---|---|
-Context <String> |
Класс DbContext для использования. Имя только класса или полное имя с пространствами имен. Если этот параметр опущен, EF Core находит класс контекста. Если существует несколько классов контекста, этот параметр является обязательным. |
-Project <String> |
Целевой проект. Если этот параметр опущен, Проект по умолчанию для Консоли Диспетчера Пакетов используется в качестве целевого проекта. |
-StartupProject <String> |
Запускаемый проект. Если этот параметр опущен, проект Startup в свойствах решения используется в качестве целевого проекта. |
-Args <String> |
Аргументы, переданные приложению. |
-Verbose |
Отображение подробных выходных данных. |
Чтобы отобразить справочную информацию о команде, используйте команду Get-Help в PowerShell.
Tip
Параметры Context, Project и StartupProject поддерживают расширение табуляции.
Add-Migration
Добавляет новую миграцию.
Parameters:
| Parameter | Description |
|---|---|
-Name <String> |
Имя миграции. Это позиционный параметр и является обязательным. |
-OutputDir <String> |
Каталог, используемый для вывода файлов. Пути относительно целевого каталога проекта. По умолчанию — "Миграции". |
-Namespace <String> |
Пространство имен, используемое для созданных классов. По умолчанию создается из выходного каталога. |
Общие параметры перечислены выше.
Bundle-Migration
Создает исполняемый файл для обновления базы данных.
Parameters:
| Parameter | Description |
|---|---|
-Output <String> |
Путь к создаваемому исполняемому файлу. |
-Force |
Перезаписать существующие файлы. |
-SelfContained |
Кроме того, включите среду выполнения .NET, чтобы её не пришлось устанавливать на компьютере. |
-TargetRuntime <String> |
Целевая среда выполнения для формирования пакета. |
-Framework <String> |
Целевая платформа. По умолчанию используется первый в проекте. |
Общие параметры перечислены выше.
Drop-Database
Удаляет базу данных.
Parameters:
| Parameter | Description |
|---|---|
-WhatIf |
Показать, какая база данных будет удалена, но не удаляйте ее. |
-Connection <String> |
Строка подключения к базе данных. По умолчанию выбирается тот, который указан в AddDbContext или OnConfiguring. Добавлено в EF Core 11. |
Общие параметры перечислены выше.
Get-DbContext
Перечисляет и получает сведения о доступных типах DbContext.
Общие параметры перечислены выше.
Get-Migration
Перечисляет доступные миграции.
Parameters:
| Parameter | Description |
|---|---|
-Connection <String> |
Строка подключения к базе данных. По умолчанию предполагается использование значений, указанных в AddDbContext или OnConfiguring. |
-NoConnect |
Не подключайтесь к базе данных. |
Общие параметры перечислены выше.
Optimize-DbContext
Создает скомпилированную версию модели, используемой моделью DbContext.
См. скомпилированные модели для получения дополнительной информации.
Parameters:
| Parameter | Description |
|---|---|
-OutputDir <String> |
Каталог, в который нужно поместить файлы. Пути относительны к каталогу проекта. |
-Namespace <String> |
Пространство имен, используемое для всех созданных классов. По умолчанию создается из корневого пространства имен и выходного каталога плюс CompiledModels. |
Общие параметры перечислены выше.
Note
В настоящее время средства PMC не поддерживают создание кода, необходимого для компиляции NativeAOT и предварительно скомпилированных запросов.
В следующем примере используются значения по умолчанию и он работает, если в проекте есть только один DbContext.
Optimize-DbContext
В следующем примере модель оптимизирована для контекста с указанным именем и помещает ее в отдельную папку и пространство имен:
Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext
Remove-Migration
Удаляет последнюю миграцию (отменяет изменения кода, выполненные для миграции).
Parameters:
| Parameter | Description |
|---|---|
-Force |
Восстановление миграции (откат изменений, примененных к базе данных). |
-Connection <String> |
Строка подключения к базе данных. По умолчанию выбирается тот, который указан в AddDbContext или OnConfiguring. Добавлено в EF Core 11. |
-Offline |
Удалите миграцию без подключения к базе данных. Добавлено в EF Core 11. |
Общие параметры перечислены выше.
Note
Параметры -Offline и -Force параметры нельзя использовать вместе, так как -Force требуется подключение к базе данных, чтобы проверить, применена ли миграция, прежде чем отменить ее.
Scaffold-DbContext
Генерирует код и типы сущностей для базы данных DbContext. Чтобы Scaffold-DbContext создать тип сущности, таблица базы данных должна иметь первичный ключ.
Parameters:
| Parameter | Description |
|---|---|
-Connection <String> |
Строка подключения к базе данных. Значение может быть name=<имя строки подключения>. В этом случае название происходит из конфигурационных источников, настроенных для проекта. Это позиционный параметр и является обязательным. |
-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 |
Используйте атрибуты для настройки модели (по возможности). Если этот параметр опущен, используется только Fluent API. |
-UseDatabaseNames |
Используйте имена таблиц, представлений, последовательностей и столбцов точно так же, как они отображаются в базе данных. Если этот параметр опущен, имена баз данных изменяются на более тесное соответствие соглашениям о стиле имен C#. |
-Force |
Перезаписать существующие файлы. |
-NoOnConfiguring |
Не создавайте DbContext.OnConfiguring. |
-NoPluralize |
Не используйте плюрайзер. |
Общие параметры перечислены выше.
Example:
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
В следующем примере считывается строка подключения, используя Configuration.
Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer
Script-DbContext
Создает скрипт SQL из DbContext. Обходит любые процессы миграции.
Parameters:
| Parameter | Description |
|---|---|
-Output <String> |
Файл для записи результата. |
Общие параметры перечислены выше.
Script-Migration
Создает скрипт SQL, который применяет все изменения из одной выбранной миграции к другой выбранной миграции.
Parameters:
| Parameter | Description |
|---|---|
-From <String> |
Начальная миграция. Миграции могут быть определены по имени или по идентификатору. Число 0 — это особый случай, который означает перед первой миграцией. Значение по умолчанию — 0. |
-To <String> |
Окончание миграции. По умолчанию выбирается последняя миграция. |
-Idempotent |
Создайте скрипт, который можно использовать в базе данных при любой миграции. |
-NoTransactions |
Не создавайте инструкции транзакций SQL. |
-Output <String> |
Файл для записи результата. Если этот параметр опущен, файл создается с созданным именем в той же папке, что и файлы среды выполнения приложения, например /obj/Debug/netcoreapp2.1/ghbkztfz.sql/. |
Общие параметры перечислены выше.
Tip
Параметры To, From и Output поддерживают расширение табуляции.
В следующем примере создается скрипт для миграции InitialCreate (из базы данных без каких-либо миграций) с использованием имени миграции.
Script-Migration 0 InitialCreate
В следующем примере создается скрипт для всех миграций после миграции InitialCreate с помощью идентификатора миграции.
Script-Migration 20180904195021_InitialCreate
Update-Database
Обновляет базу данных до последней миграции или указанной миграции.
| Parameter | Description |
|---|---|
-Migration <String> |
Целевая миграция. Миграции могут быть определены по имени или по идентификатору. Число 0 — это особый случай, который означает перед первой миграцией и приводит к отмене всех миграций. Если миграция не указана, команда по умолчанию используется для последней миграции. |
-Connection <String> |
Строка подключения к базе данных. По умолчанию выбирается тот, который указан в AddDbContext или OnConfiguring. |
Общие параметры перечислены выше.
Tip
Параметр Migration поддерживает разворот табуляций.
В следующем примере выполняется отмена всех миграций.
Update-Database 0
Примеры ниже демонстрируют, как обновить базу данных до указанной миграции. Первый использует имя миграции, а второй использует идентификатор миграции и указанное соединение:
Update-Database InitialCreate
Update-Database 20180904195021_InitialCreate -Connection your_connection_string