Справочник по — .NET CLI средствам Entity Framework CoreEntity Framework Core tools reference - .NET CLI

Средства интерфейса командной строки (CLI) для Entity Framework Core выполнения задач разработки во время разработки.The command-line interface (CLI) tools for Entity Framework Core perform design-time development tasks. Например, они создают миграций, применить миграции и создать код для модели, основанные на существующей базы данных.For example, they create migrations, apply migrations, and generate code for a model based on an existing database. Команды представляют собой расширение для кроссплатформенного dotnet команду, которая входит в состав из пакет SDK для .NET Core.The commands are an extension to the cross-platform dotnet command, which is part of the .NET Core SDK. Эти средства работы с проектами .NET Core.These tools work with .NET Core projects.

Если вы используете Visual Studio, мы рекомендуем инструменты консоли диспетчера пакетов вместо:If you're using Visual Studio, we recommend the Package Manager Console tools instead:

  • Они автоматически взаимодействуют с текущего проекта, выбранного в консоль диспетчера пакетов без необходимости вручную переключить каталоги.They automatically work with the current project selected in the Package Manager Console without requiring that you manually switch directories.
  • Они автоматически открывают файлы, созданные с помощью команды после выполнения команды.They automatically open files generated by a command after the command is completed.

Установка инструментовInstalling the tools

Процедура установки зависит от типа проекта и версии:The installation procedure depends on project type and version:

  • ASP.NET Core версии 2.1 и более поздние версииASP.NET Core version 2.1 and later
  • EF Core 2.xEF Core 2.x
  • EF Core 1.xEF Core 1.x

ASP.NET Core 2.1 или более позднейASP.NET Core 2.1+

  • Установка текущего пакет SDK для .NET Core.Install the current .NET Core SDK. Это нужно сделать, даже если у вас установлена последняя версия Visual Studio 2017.The SDK has to be installed even if you have the latest version of Visual Studio 2017.

    Это все, что необходимо для ASP.NET Core 2.1 или более поздней, поскольку Microsoft.EntityFrameworkCore.Design пакет включен в метапакет Microsoft.AspNetCore.App.This is all that is needed for ASP.NET Core 2.1+ because the Microsoft.EntityFrameworkCore.Design package is included in the Microsoft.AspNetCore.App metapackage.

EF Core 2.x (не в ASP.NET Core)EF Core 2.x (not ASP.NET Core)

dotnet ef Они включены в пакет SDK для .NET Core, но для включения команд необходимо установить Microsoft.EntityFrameworkCore.Design пакета.The dotnet ef commands are included in the .NET Core SDK, but to enable the commands you have to install the Microsoft.EntityFrameworkCore.Design package.

  • Установка текущего пакет SDK для .NET Core.Install the current .NET Core SDK. Это нужно сделать, даже если у вас установлена последняя версия Visual Studio 2017.The SDK has to be installed even if you have the latest version of Visual Studio 2017.

  • Установите последнюю стабильную Microsoft.EntityFrameworkCore.Design пакета.Install the latest stable Microsoft.EntityFrameworkCore.Design package.

    dotnet add package Microsoft.EntityFrameworkCore.Design
    

EF Core 1.xEF Core 1.x

  • Установка пакета SDK .NET Core версии 2.1.200.Install the .NET Core SDK version 2.1.200. Более поздние версии не совместимы с помощью средств CLI для EF Core 1.0 и 1.1.Later versions are not compatible with CLI tools for EF Core 1.0 and 1.1.

  • Настройка приложения для использования 2.1.200 версию пакета SDK, изменив его global.json файла.Configure the application to use the 2.1.200 SDK version by modifying its global.json file. Этот файл обычно включаются в каталоге решения (по одному выше проекта).This file is normally included in the solution directory (one above the project).

  • Измените файл проекта и добавьте Microsoft.EntityFrameworkCore.Tools.DotNet как DotNetCliToolReference элемента.Edit the project file and add Microsoft.EntityFrameworkCore.Tools.DotNet as a DotNetCliToolReference item. Укажите последнюю версию 1.x, например: 1.1.6.Specify the latest 1.x version, for example: 1.1.6. См. в примере файла проекта в конце этого раздела.See the project file example at the end of this section.

  • Установка последней версии 1.x Microsoft.EntityFrameworkCore.Design пакета, например:Install the latest 1.x version of the Microsoft.EntityFrameworkCore.Design package, for example:

    dotnet add package Microsoft.EntityFrameworkCore.Design -v 1.1.6
    

    С помощью ссылки на пакеты оба добавлены файле проекта выглядит примерно следующим образом:With both package references added, the project file looks something like this:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp1.1</TargetFramework>
      </PropertyGroup>
      <ItemGroup>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design"
                          Version="1.1.6"
                           PrivateAssets="All" />
      </ItemGroup>
      <ItemGroup>
         <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
                                Version="1.1.6" />
      </ItemGroup>
    </Project>
    

    Ссылку на пакет с PrivateAssets="All" не предоставляется для проектов, которые ссылаются на этот проект.A package reference with PrivateAssets="All" isn't exposed to projects that reference this project. Это ограничение особенно полезна для пакетов, которые обычно используются только во время разработки.This restriction is especially useful for packages that are typically only used during development.

Проверка установкиVerify installation

Выполните следующие команды, чтобы проверить, правильно установлены средства интерфейса командной строки EF Core:Run the following commands to verify that EF Core CLI tools are correctly installed:

dotnet restore
dotnet ef

Результатом выполнения команды определяет версию средства в используйте:The output from the command identifies the version of the tools in use:


                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\

Entity Framework Core .NET Command-line Tools 2.1.3-rtm-32065

<Usage documentation follows, not shown.>

С помощью средствUsing the tools

Перед использованием средств, может потребоваться создать запускаемый проект, или установите среду.Before using the tools, you might have to create a startup project or set the environment.

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

См. команды проекта и запускаемым проектом.The commands refer to a project and a startup project.

  • Проекта также известен как целевой проект так как это где команды добавления или удаления файлов.The project is also known as the target project because it's where the commands add or remove files. По умолчанию проект в текущем каталоге является целевого проекта.By default, the project in the current directory is the target project. Можно указать другой проект в качестве целевого проекта с помощью --project параметр.You can specify a different project as target project by using the --project option.

  • Запускаемым проектом является тот, который построение и запуск средств.The startup project is the one that the tools build and run. Средства должны выполнить код приложения во время разработки для получения сведений о проекте, например строку подключения базы данных и конфигурации модели.The tools have to execute application code at design time to get information about the project, such as the database connection string and the configuration of the model. По умолчанию проект в текущем каталоге является запускаемым проектом.By default, the project in the current directory is the startup project. Можно указать другой проект запускаемым проектом с помощью --startup-project параметр.You can specify a different project as startup project by using the --startup-project option.

Зачастую того же проекта запускаемого проекта и целевой проект.The startup project and target project are often the same project. Типичный сценарий, где они находятся отдельные проекты — когда:A typical scenario where they are separate projects is when:

  • В библиотеке классов .NET Core, EF Core контекст и классы сущностей.The EF Core context and entity classes are in a .NET Core class library.
  • Консольное приложение .NET Core или веб-приложение ссылается на библиотеку классов.A .NET Core console app or web app references the class library.

Существует также возможность поместите код миграции в библиотеку классов, отдельно от контекста EF Core.It's also possible to put migrations code in a class library separate from the EF Core context.

Другие целевые платформыOther target frameworks

Средства CLI работать с проектам .NET Core и .NET Framework.The CLI tools work with .NET Core projects and .NET Framework projects. Приложения, которые имеют модель EF Core в библиотеку классов .NET Standard может отсутствовать, .NET Core или .NET Framework проекта.Apps that have the EF Core model in a .NET Standard class library might not have a .NET Core or .NET Framework project. Например это верно для приложений Xamarin и универсальной платформы Windows.For example, this is true of Xamarin and Universal Windows Platform apps. В таком случае можно создать проект консольного приложения .NET Core, единственным назначением которого является в качестве запускаемого проекта для средств.In such cases, you can create a .NET Core console app project whose only purpose is to act as startup project for the tools. Проект может быть пустым проектом с не содержащим реального кода — этот компонент необходим только для предоставления целевой объект для выполнения средства.The project can be a dummy project with no real code — it is only needed to provide a target for the tooling.

Почему является пустым проектом требуется?Why is a dummy project required? Как упоминалось ранее, средства нужно выполнять код приложения во время разработки.As mentioned earlier, the tools have to execute application code at design time. Для этого им необходимо использовать среду выполнения .NET Core.To do that, they need to use the .NET Core runtime. Когда модель EF Core находится в проекте, ориентированном на .NET Core или .NET Framework, средства EF Core позаимствовать среды выполнения из проекта.When the EF Core model is in a project that targets .NET Core or .NET Framework, the EF Core tools borrow the runtime from the project. Они не могут делать, если модель EF Core в библиотеку классов .NET Standard.They can't do that if the EF Core model is in a .NET Standard class library. .NET Standard не фактическую реализацию .NET; это спецификация набора API-интерфейсов, реализации .NET должны поддерживать.The .NET Standard is not an actual .NET implementation; it's a specification of a set of APIs that .NET implementations must support. Поэтому .NET Standard недостаточно для инструментов EF Core для выполнения кода приложения.Therefore .NET Standard is not sufficient for the EF Core tools to execute application code. Фиктивный проект, созданный для использования в качестве запускаемого проекта предоставляет конкретную целевую платформу, в которой средства можно загружать библиотеки классов .NET Standard.The dummy project you create to use as startup project provides a concrete target platform into which the tools can load the .NET Standard class library.

Среда ASP.NET CoreASP.NET Core environment

Чтобы указать среду для проектов ASP.NET Core, задайте ASPNETCORE_ENVIRONMENT переменной среды перед запуском команды.To specify the environment for ASP.NET Core projects, set the ASPNETCORE_ENVIRONMENT environment variable before running commands.

Общие параметрыCommon options

ПараметрOption Описание:Description
--json Показать выходные данные JSON.Show JSON output.
-c --context <DBCONTEXT> DbContext Класс для использования.The DbContext class to use. Имя класса, только из цифр или полное с пространствами имен.Class name only or fully qualified with namespaces. Если этот параметр опущен, найти класс контекста EF Core.If this option is omitted, EF Core will find the context class. Если имеется несколько классов контекста, этот параметр является обязательным.If there are multiple context classes, this option is required.
-p --project <PROJECT> Относительный путь к папке проекта целевого проекта.Relative path to the project folder of the target project. Значение по умолчанию является текущая папка.Default value is the current folder.
-s --startup-project <PROJECT> Относительный путь к папке проекта, запускаемого проекта.Relative path to the project folder of the startup project. Значение по умолчанию является текущая папка.Default value is the current folder.
--framework <FRAMEWORK> Моникера целевой платформы для требуемой версии .NET framework.The Target Framework Moniker for the target framework. Используется, если в файле проекта указываются нескольких целевых платформ, и вы хотите выбрать один из них.Use when the project file specifies multiple target frameworks, and you want to select one of them.
--configuration <CONFIGURATION> Конфигурацию сборки, например: Debug или Release.The build configuration, for example: Debug or Release.
--runtime <IDENTIFIER> Идентификатор целевой среды выполнения для восстановления пакетов.The identifier of the target runtime to restore packages for. Список идентификаторов сред выполнения (RID) см. в каталоге RID.For a list of Runtime Identifiers (RIDs), see the RID catalog.
-h --help Показать справочные сведения.Show help information.
-v --verbose Показать подробные выходные данные.Show verbose output.
--no-color Не необходимо выделить цветом выходные данные.Don't colorize output.
--prefix-output Префикс выходных данных с уровнем.Prefix output with level.

Удаление базы данных ef DotNetdotnet ef database drop

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

Параметры:Options:

ПараметрOption Описание:Description
-f --force Не подтверждено.Don't confirm.
--dry-run Показать базу данных, которая будет удалена, но не удаляйте ее.Show which database would be dropped, but don't drop it.

Обновление базы данных ef DotNetdotnet ef database update

Обновляет базу данных, последнюю миграцию или указанного миграции.Updates the database to the last migration or to a specified migration.

Аргументы:Arguments:

АргументArgument Описание:Description
<MIGRATION> Целевой объект миграции.The target migration. Миграция может быть идентифицирован по имени или по идентификатору.Migrations may be identified by name or by ID. Число 0 является особым случаем, это значит, что перед первой миграции и вызывает всех операций переноса для отмены изменений.The number 0 is a special case that means before the first migration and causes all migrations to be reverted. Если перенос не указан, команда по умолчанию к последней миграции.If no migration is specified, the command defaults to the last migration.

Следующие примеры обновления базы данных для указанного миграции.The following examples update the database to a specified migration. Первый использует имя миграции, а второй использует идентификатор миграции:The first uses the migration name and the second uses the migration ID:

dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate

сведения о dbcontext ef DotNetdotnet ef dbcontext info

Получает сведения о DbContext типа.Gets information about a DbContext type.

DotNet ef dbcontext спискаdotnet ef dbcontext list

Выводит список доступных DbContext типов.Lists available DbContext types.

DotNet ef dbcontext каркасаdotnet ef dbcontext scaffold

Создает код для DbContext и типы сущностей для базы данных.Generates code for a DbContext and entity types for a database. Чтобы эту команду, чтобы создать тип сущности в таблице базы данных должен иметь первичный ключ.In order for this command to generate an entity type, the database table must have a primary key.

Аргументы:Arguments:

АргументArgument Описание:Description
<CONNECTION> Строка подключения к базе данных.The connection string to the database. Для проектов ASP.NET Core 2.x, значение может быть имя =<имя строки подключения >.For ASP.NET Core 2.x projects, the value can be name=<name of connection string>. В этом случае имя берется из источников конфигурации, которые были настроены для проекта.In that case the name comes from the configuration sources that are set up for the project.
<PROVIDER> Используемый поставщик.The provider to use. Обычно это имя пакета NuGet, например: Microsoft.EntityFrameworkCore.SqlServer.Typically this is the name of the NuGet package, for example: Microsoft.EntityFrameworkCore.SqlServer.

Параметры:Options:

ПараметрOption Описание:Description
-d-d --data-annotations Атрибуты можно используйте для настройки модели (где это возможно).Use attributes to configure the model (where possible). Если этот параметр опущен, используется только текучего API.If this option is omitted, only the fluent API is used.
-c --context <NAME> Имя DbContext класса, необходимо создать.The name of the DbContext class to generate.
--context-dir <PATH> Каталог для размещения DbContext файл класса.The directory to put the DbContext class file in. Пути задаются относительно каталога проекта.Paths are relative to the project directory. Пространства имен являются производными от ее имени.Namespaces are derived from the folder names.
-f --force Перезаписывайте существующие файлы.Overwrite existing files.
-o --output-dir <PATH> Чтобы поместить файлы классов сущностей в каталог.The directory to put entity class files in. Пути задаются относительно каталога проекта.Paths are relative to the project directory.
--schema <SCHEMA_NAME>... Схемы таблиц для создания типов сущности для.The schemas of tables to generate entity types for. Чтобы указать несколько схем, повторите --schema для каждого из них.To specify multiple schemas, repeat --schema for each one. Если этот параметр указан, включаются все схемы.If this option is omitted, all schemas are included.
-t --table <TABLE_NAME>...--table <TABLE_NAME>... Для создания типов сущности для таблиц.The tables to generate entity types for. Чтобы указать несколько таблиц, повторите -t или --table для каждого из них.To specify multiple tables, repeat -t or --table for each one. Если этот параметр указан, включаются все таблицы.If this option is omitted, all tables are included.
--use-database-names Используйте имена таблиц и столбцов, так же, как в базе данных.Use table and column names exactly as they appear in the database. Если этот параметр задан, имена баз данных меняется на более точно соответствовать соглашениям C# имя стиля.If this option is omitted, database names are changed to more closely conform to C# name style conventions.

В следующем примере, формирует шаблоны все схемы и таблицы и помещает новые файлы в моделей папки.The following example scaffolds all schemas and tables and puts the new files in the Models folder.

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

В следующем примере формирует шаблоны только указанных таблиц и создает контекст в отдельную папку с указанным именем:The following example scaffolds only selected tables and creates the context in a separate folder with a specified name:

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -t Blog -t Post --context-dir Context -c BlogContext

Добавление DotNet ef migrationsdotnet ef migrations add

Добавление новой миграции.Adds a new migration.

Аргументы:Arguments:

АргументArgument Описание:Description
<NAME> Имя миграции.The name of the migration.

Параметры:Options:

ПараметрOption Описание:Description
-o --output-dir <PATH> Каталог (и sub-namespace) для использования.The directory (and sub-namespace) to use. Пути задаются относительно каталога проекта.Paths are relative to the project directory. По умолчанию используется «Миграция».Defaults to "Migrations".

DotNet ef migrations спискаdotnet ef migrations list

Список доступных миграций.Lists available migrations.

удалить DotNet ef migrationsdotnet ef migrations remove

Удаляет последнюю миграцию (выполняется откат изменений кода, которые были выполнены для миграции).Removes the last migration (rolls back the code changes that were done for the migration).

Параметры:Options:

ПараметрOption Описание:Description
-f --force Миграции отменить (откатить изменения, которые были применены к базе данных).Revert the migration (roll back the changes that were applied to the database).

DotNet ef migrations сценарияdotnet ef migrations script

Формирует скрипт SQL из миграции.Generates a SQL script from migrations.

Аргументы:Arguments:

АргументArgument Описание:Description
<FROM> Начала миграции.The starting migration. Миграция может быть идентифицирован по имени или по идентификатору.Migrations may be identified by name or by ID. Число 0 является особым случаем, это значит, что перед первой миграции.The number 0 is a special case that means before the first migration. По умолчанию равно 0.Defaults to 0.
<TO> Окончания миграции.The ending migration. По умолчанию к последней миграции.Defaults to the last migration.

Параметры:Options:

ПараметрOption Описание:Description
-o --output <FILE> Файл, чтобы написать сценарий для.The file to write the script to.
-i --idempotent Создайте скрипт, который может использоваться в любой базе данных с любой миграции.Generate a script that can be used on a database at any migration.

В следующем примере создается скрипт для миграции это InitialCreate:The following example creates a script for the InitialCreate migration:

dotnet ef migrations script 0 InitialCreate

В следующем примере создается скрипт для всех операций миграции после миграции это InitialCreate.The following example creates a script for all migrations after the InitialCreate migration.

dotnet ef migrations script 20180904195021_InitialCreate

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