Referencia de las herramientas de Entity Framework Core - CLI de .NETEntity Framework Core tools reference - .NET CLI

Las herramientas de interfaz de línea de comandos (CLI) para Entity Framework Core realizan tareas de desarrollo de tiempo de diseño.The command-line interface (CLI) tools for Entity Framework Core perform design-time development tasks. Por ejemplo, que crean migraciones, aplicar las migraciones y generar código para un modelo basado en una base de datos existente.For example, they create migrations, apply migrations, and generate code for a model based on an existing database. Los comandos son una extensión multiplataforma dotnet comando, que forma parte de la SDK de .NET Core.The commands are an extension to the cross-platform dotnet command, which is part of the .NET Core SDK. Estas herramientas funcionan con proyectos de .NET Core.These tools work with .NET Core projects.

Si usa Visual Studio, se recomienda la herramientas de la consola de administrador de paquetes en su lugar:If you're using Visual Studio, we recommend the Package Manager Console tools instead:

  • Trabajan automáticamente con el proyecto actual seleccionado en el Package Manager Console sin necesidad de cambiar manualmente los directorios.They automatically work with the current project selected in the Package Manager Console without requiring that you manually switch directories.
  • Abran automáticamente los archivos generados por un comando una vez completado el comando.They automatically open files generated by a command after the command is completed.

Instalación de las herramientasInstalling the tools

El procedimiento de instalación depende de la versión y tipo de proyecto:The installation procedure depends on project type and version:

  • EF Core 3.xEF Core 3.x
  • ASP.NET Core 2.1 y versiones posterioresASP.NET Core version 2.1 and later
  • EF Core 2.xEF Core 2.x
  • EF Core 1.xEF Core 1.x

EF Core 3.xEF Core 3.x

  • dotnet ef debe estar instalado como una herramienta global o local.dotnet ef must be installed as a global or local tool. Se instalará la mayoría de los desarrolladores dotnet ef como una herramienta global con el siguiente comando:Most developers will install dotnet ef as a global tool with the following command:

      $ dotnet tool install --global dotnet-ef --version 3.0.0-*
    

    También puede usar dotnet ef como herramienta local.You can also use dotnet ef as local tool. Para usarla como una herramienta local, restaurar las dependencias de un proyecto que lo declara como una dependencia de herramientas mediante un archivo de manifiesto de la herramienta.To use it as a local tool, restore the dependencies of a project that declares it as a tooling dependency using a tool manifest file.

  • Instalar el 3.0 del SDK de .NET Core).Install the .NET Core SDK 3.0). El SDK debe estar instalado incluso si tiene la versión más reciente de Visual Studio.The SDK has to be installed even if you have the latest version of Visual Studio.

  • Instale la última versión Microsoft.EntityFrameworkCore.Design paquete.Install the latest Microsoft.EntityFrameworkCore.Design package.

    dotnet add package Microsoft.EntityFrameworkCore.Design
    

ASP.NET Core 2.1 +ASP.NET Core 2.1+

  • Instalar actual SDK de .NET Core.Install the current .NET Core SDK. El SDK debe estar instalado incluso si dispone de la versión más reciente de Visual Studio 2017.The SDK has to be installed even if you have the latest version of Visual Studio 2017.

    Esto es todo lo que es necesario para ASP.NET Core 2.1 + porque el Microsoft.EntityFrameworkCore.Design paquete se incluye en el Microsoft.AspNetCore.App metapaquete.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 (no en ASP.NET Core)EF Core 2.x (not ASP.NET Core)

El dotnet ef comandos están incluidos en el SDK de .NET Core, pero para habilitar los comandos tiene que instalar el Microsoft.EntityFrameworkCore.Design paquete.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.

  • Instalar actual SDK de .NET Core.Install the current .NET Core SDK. El SDK debe estar instalado incluso si tiene la versión más reciente de Visual Studio.The SDK has to be installed even if you have the latest version of Visual Studio.

  • Instalar el estable más reciente Microsoft.EntityFrameworkCore.Design paquete.Install the latest stable Microsoft.EntityFrameworkCore.Design package.

    dotnet add package Microsoft.EntityFrameworkCore.Design
    

EF Core 1.xEF Core 1.x

  • Instale el SDK de .NET Core versión 2.1.200.Install the .NET Core SDK version 2.1.200. Las versiones posteriores no son compatibles con herramientas de la CLI de EF Core 1.0 y 1.1.Later versions are not compatible with CLI tools for EF Core 1.0 and 1.1.

  • Configurar la aplicación para uso el 2.1.200 SDK versión modificando su global.json archivo.Configure the application to use the 2.1.200 SDK version by modifying its global.json file. Este archivo normalmente se incluye en el directorio de la solución (uno por encima del proyecto).This file is normally included in the solution directory (one above the project).

  • Edite el archivo de proyecto y agregue Microsoft.EntityFrameworkCore.Tools.DotNet como un DotNetCliToolReference elemento.Edit the project file and add Microsoft.EntityFrameworkCore.Tools.DotNet as a DotNetCliToolReference item. Especifique la última versión 1.x, por ejemplo: 1.1.6.Specify the latest 1.x version, for example: 1.1.6. Vea el ejemplo de archivo de proyecto al final de esta sección.See the project file example at the end of this section.

  • Instale la última versión 1.x de la Microsoft.EntityFrameworkCore.Design empaquetar, por ejemplo:Install the latest 1.x version of the Microsoft.EntityFrameworkCore.Design package, for example:

    dotnet add package Microsoft.EntityFrameworkCore.Design -v 1.1.6
    

    Con ambas referencias de paquete que agregan, el archivo de proyecto tiene un aspecto similar al siguiente: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>
    

    Una referencia de paquete con PrivateAssets="All" no se expone a los proyectos que hacen referencia a este proyecto.A package reference with PrivateAssets="All" isn't exposed to projects that reference this project. Esta restricción es especialmente útil para los paquetes que normalmente se usan solo durante el desarrollo.This restriction is especially useful for packages that are typically only used during development.

Comprobar la instalaciónVerify installation

Ejecute los comandos siguientes para comprobar que se han instalado correctamente herramientas de CLI de EF Core:Run the following commands to verify that EF Core CLI tools are correctly installed:

dotnet restore
dotnet ef

La salida del comando identifica la versión de las herramientas de uso: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.>

Uso de las herramientasUsing the tools

Antes de usar las herramientas, es posible que deba crear un proyecto de inicio o establecer el entorno.Before using the tools, you might have to create a startup project or set the environment.

Proyecto de destino y proyecto de inicioTarget project and startup project

Los comandos que hacen referencia a un proyecto y un proyecto de inicio.The commands refer to a project and a startup project.

  • El proyecto también es conocido como el proyecto de destino porque es donde los comandos Agregar o quitar archivos.The project is also known as the target project because it's where the commands add or remove files. De forma predeterminada, el proyecto en el directorio actual es el proyecto de destino.By default, the project in the current directory is the target project. Puede especificar otro proyecto como proyecto de destino mediante el --project opción.You can specify a different project as target project by using the --project option.

  • El proyecto de inicio es lo que las herramientas de compilación y ejecutan.The startup project is the one that the tools build and run. Tienen las herramientas ejecutar código de la aplicación en tiempo de diseño para obtener información sobre el proyecto, como la cadena de conexión de base de datos y la configuración del modelo.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. De forma predeterminada, el proyecto en el directorio actual es el proyecto de inicio.By default, the project in the current directory is the startup project. Puede especificar otro proyecto como proyecto de inicio mediante el --startup-project opción.You can specify a different project as startup project by using the --startup-project option.

El proyecto de inicio y el proyecto de destino suelen ser el mismo proyecto.The startup project and target project are often the same project. Un escenario típico, donde son proyectos independientes es cuando:A typical scenario where they are separate projects is when:

  • Las clases de entidad y el contexto de EF Core están en una biblioteca de clases de .NET Core.The EF Core context and entity classes are in a .NET Core class library.
  • Una aplicación de consola .NET Core o una aplicación web hace referencia a la biblioteca de clases.A .NET Core console app or web app references the class library.

También es posible colocar código de migraciones en una biblioteca de clases independiente desde el contexto de EF Core.It's also possible to put migrations code in a class library separate from the EF Core context.

Otros marcos de destinoOther target frameworks

Las herramientas CLI funcionan con proyectos de .NET Core y proyectos de .NET Framework.The CLI tools work with .NET Core projects and .NET Framework projects. Las aplicaciones que tienen el modelo de EF Core en una biblioteca de clases .NET Standard que no tenga un proyecto de .NET Framework o .NET Core.Apps that have the EF Core model in a .NET Standard class library might not have a .NET Core or .NET Framework project. Por ejemplo, esto es cierto de aplicaciones de Xamarin y plataforma Universal de Windows.For example, this is true of Xamarin and Universal Windows Platform apps. En tales casos, puede crear un proyecto de aplicación de consola .NET Core cuyo único propósito es actuar como proyecto de inicio para las herramientas.In such cases, you can create a .NET Core console app project whose only purpose is to act as startup project for the tools. El proyecto puede ser un proyecto ficticio sin código real — solo es necesario proporcionar un destino para las herramientas.The project can be a dummy project with no real code — it is only needed to provide a target for the tooling.

¿Por qué es un proyecto ficticio necesario?Why is a dummy project required? Como se mencionó anteriormente, tienen las herramientas ejecutar código de la aplicación en tiempo de diseño.As mentioned earlier, the tools have to execute application code at design time. Para ello, deben usar el runtime de .NET Core.To do that, they need to use the .NET Core runtime. Cuando el modelo de EF Core está en un proyecto destinado a .NET Core o .NET Framework, las herramientas de EF Core pedir prestado el tiempo de ejecución del proyecto.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. No puede hacerlo si el modelo de EF Core está en una biblioteca de clases .NET Standard.They can't do that if the EF Core model is in a .NET Standard class library. .NET Standard no es una implementación real. NET; es una especificación de un conjunto de API que las implementaciones de .NET deben admitir.The .NET Standard is not an actual .NET implementation; it's a specification of a set of APIs that .NET implementations must support. Por lo tanto, .NET Standard no es suficiente para las herramientas de EF Core ejecutar código de la aplicación.Therefore .NET Standard is not sufficient for the EF Core tools to execute application code. El proyecto ficticio creado para usar como proyecto de inicio proporciona una plataforma de destino concreta en la que las herramientas pueden cargar la biblioteca de clases .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.

Entorno de ASP.NET CoreASP.NET Core environment

Para especificar el entorno para proyectos de ASP.NET Core, establezca el ASPNETCORE_ENVIRONMENT variable de entorno antes de ejecutar comandos.To specify the environment for ASP.NET Core projects, set the ASPNETCORE_ENVIRONMENT environment variable before running commands.

Opciones comunesCommon options

OpciónOption DESCRIPCIÓNDescription
--json Mostrar la salida JSON.Show JSON output.
-c --context <DBCONTEXT> La clase DbContext que se va a usar.The DbContext class to use. Nombre de clase completa con espacios de nombres o única.Class name only or fully qualified with namespaces. Si se omite esta opción, EF Core encontrará la clase de contexto.If this option is omitted, EF Core will find the context class. Si hay varias clases de contexto, esta opción es necesaria.If there are multiple context classes, this option is required.
-p --project <PROJECT> Ruta de acceso relativa a la carpeta de proyecto del proyecto de destino.Relative path to the project folder of the target project. Valor predeterminado es la carpeta actual.Default value is the current folder.
-s --startup-project <PROJECT> Ruta de acceso relativa a la carpeta de proyecto del proyecto de inicio.Relative path to the project folder of the startup project. Valor predeterminado es la carpeta actual.Default value is the current folder.
--framework <FRAMEWORK> El Moniker de la plataforma de destino para el .NET framework de destino.The Target Framework Moniker for the target framework. Se utiliza cuando el archivo de proyecto especifica varios marcos de destino, y desea seleccionar uno de ellos.Use when the project file specifies multiple target frameworks, and you want to select one of them.
--configuration <CONFIGURATION> La configuración de compilación, por ejemplo: Debug o Release.The build configuration, for example: Debug or Release.
--runtime <IDENTIFIER> El identificador de restaurar los paquetes para el runtime de destino.The identifier of the target runtime to restore packages for. Para obtener una lista de identificadores de tiempo de ejecución (RID), consulte el catálogo de RID.For a list of Runtime Identifiers (RIDs), see the RID catalog.
-h --help Mostrar información de ayuda.Show help information.
-v --verbose Mostrar resultados detallados.Show verbose output.
--no-color No colorear salida.Don't colorize output.
--prefix-output Prefijo con el nivel de salida.Prefix output with level.

colocación de base de datos de ef de dotnetdotnet ef database drop

Quita la base de datos.Drops the database.

Opciones:Options:

OpciónOption DESCRIPCIÓNDescription
-f --force No se confirme.Don't confirm.
--dry-run Mostrar qué base de datos se quitarían, pero no colóquelo.Show which database would be dropped, but don't drop it.

actualización de base de datos de ef de dotnetdotnet ef database update

Actualiza la base de datos a la última migración o a una migración especificada.Updates the database to the last migration or to a specified migration.

Argumentos:Arguments:

ArgumentoArgument DESCRIPCIÓNDescription
<MIGRATION> La migración de destino.The target migration. Las migraciones pueden identificarse por su nombre o identificador.Migrations may be identified by name or by ID. El número 0 es un caso especial que significa antes de la primera migración y hace que todas las migraciones se puede revertir.The number 0 is a special case that means before the first migration and causes all migrations to be reverted. Si no se especifica ninguna migración, lo valores predeterminados del comando a la última migración.If no migration is specified, the command defaults to the last migration.

Los ejemplos siguientes actualización la base de datos para una migración especificada.The following examples update the database to a specified migration. El primero usa el nombre de la migración y la segunda usa el identificador de la migración:The first uses the migration name and the second uses the migration ID:

dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate

información de dotnet ef dbcontextdotnet ef dbcontext info

Obtiene información sobre un DbContext tipo.Gets information about a DbContext type.

lista de dbcontext de ef de dotnetdotnet ef dbcontext list

Listas disponibles DbContext tipos.Lists available DbContext types.

scaffolding de dbcontext de ef de dotnetdotnet ef dbcontext scaffold

Genera código para un DbContext y tipos de entidad para una base de datos.Generates code for a DbContext and entity types for a database. Para este comando generar un tipo de entidad, la tabla de base de datos debe tener una clave principal.In order for this command to generate an entity type, the database table must have a primary key.

Argumentos:Arguments:

ArgumentoArgument DESCRIPCIÓNDescription
<CONNECTION> La cadena de conexión a la base de datos.The connection string to the database. Para los proyectos de ASP.NET Core 2.x, el valor puede ser nombre =<nombre de cadena de conexión > .For ASP.NET Core 2.x projects, the value can be name=<name of connection string>. En ese caso, el nombre procede de los orígenes de configuración que se configuran para el proyecto.In that case the name comes from the configuration sources that are set up for the project.
<PROVIDER> El proveedor debe usar.The provider to use. Normalmente, esto es el nombre del paquete de NuGet, por ejemplo: Microsoft.EntityFrameworkCore.SqlServer.Typically this is the name of the NuGet package, for example: Microsoft.EntityFrameworkCore.SqlServer.

Opciones:Options:

OpciónOption DESCRIPCIÓNDescription
-d-d --data-annotations Usar atributos para configurar el modelo (donde sea posible).Use attributes to configure the model (where possible). Si se omite esta opción, se usa solo la API fluida.If this option is omitted, only the fluent API is used.
-c --context <NAME> El nombre de la DbContext clase genere.The name of the DbContext class to generate.
--context-dir <PATH> El directorio para colocar el DbContext archivo de clase en.The directory to put the DbContext class file in. Las rutas de acceso son relativas al directorio de proyecto.Paths are relative to the project directory. Los espacios de nombres se derivan de los nombres de carpeta.Namespaces are derived from the folder names.
-f --force Sobrescribir archivos existentes.Overwrite existing files.
-o --output-dir <PATH> Para poner los archivos de clase de entidad en el directorio.The directory to put entity class files in. Las rutas de acceso son relativas al directorio de proyecto.Paths are relative to the project directory.
--schema <SCHEMA_NAME>... Los esquemas de tablas para generar tipos de entidad para.The schemas of tables to generate entity types for. Para especificar varios esquemas, repita --schema para cada uno de ellos.To specify multiple schemas, repeat --schema for each one. Si se omite esta opción, se incluyen todos los esquemas.If this option is omitted, all schemas are included.
-t --table <TABLE_NAME>...--table <TABLE_NAME>... Para generar tipos de entidad para las tablas.The tables to generate entity types for. Para especificar varias tablas, repita -t o --table para cada uno de ellos.To specify multiple tables, repeat -t or --table for each one. Si se omite esta opción, se incluyen todas las tablas.If this option is omitted, all tables are included.
--use-database-names Usar nombres de tabla y columna exactamente como aparecen en la base de datos.Use table and column names exactly as they appear in the database. Si se omite esta opción, se cambian los nombres de base de datos que mejor se ajuste a convenciones de estilo de nombre de C#.If this option is omitted, database names are changed to more closely conform to C# name style conventions.

El ejemplo siguiente se aplica la técnica scaffolding todos los esquemas y tablas y coloca los nuevos archivos en el modelos carpeta.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

El ejemplo siguiente se aplica la técnica scaffolding únicamente las tablas seleccionadas y crea el contexto en una carpeta independiente con un nombre especificado: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

Agregar migraciones de ef de dotnetdotnet ef migrations add

Agrega una nueva migración.Adds a new migration.

Argumentos:Arguments:

ArgumentoArgument DESCRIPCIÓNDescription
<NAME> El nombre de la migración.The name of the migration.

Opciones:Options:

OpciónOption DESCRIPCIÓNDescription
-o --output-dir <PATH> El directorio (y subespacio de nombres) para usar.The directory (and sub-namespace) to use. Las rutas de acceso son relativas al directorio de proyecto.Paths are relative to the project directory. El valor predeterminado es "Migraciones".Defaults to "Migrations".

lista de las migraciones de ef de dotnetdotnet ef migrations list

Migraciones de listas disponibles.Lists available migrations.

quitar las migraciones de ef de dotnetdotnet ef migrations remove

Quita la última migración (revierte los cambios de código que se realizaron para la migración).Removes the last migration (rolls back the code changes that were done for the migration).

Opciones:Options:

OpciónOption DESCRIPCIÓNDescription
-f --force Revertir la migración (revertir los cambios que se aplicaron a la base de datos).Revert the migration (roll back the changes that were applied to the database).

secuencia de comandos de dotnet ef migrationsdotnet ef migrations script

Genera un script SQL de migraciones.Generates a SQL script from migrations.

Argumentos:Arguments:

ArgumentoArgument DESCRIPCIÓNDescription
<FROM> La migración inicial.The starting migration. Las migraciones pueden identificarse por su nombre o identificador.Migrations may be identified by name or by ID. El número 0 es un caso especial que significa antes de la primera migración.The number 0 is a special case that means before the first migration. El valor predeterminado es 0.Defaults to 0.
<TO> La migración final.The ending migration. De forma predeterminada a la última migración.Defaults to the last migration.

Opciones:Options:

OpciónOption DESCRIPCIÓNDescription
-o --output <FILE> El archivo para escribir la secuencia de comandos.The file to write the script to.
-i --idempotent Generar un script que se puede usar en una base de datos en cualquier migración.Generate a script that can be used on a database at any migration.

El ejemplo siguiente crea una secuencia de comandos para la migración InitialCreate:The following example creates a script for the InitialCreate migration:

dotnet ef migrations script 0 InitialCreate

El ejemplo siguiente crea un script para todas las migraciones después de la migración InitialCreate.The following example creates a script for all migrations after the InitialCreate migration.

dotnet ef migrations script 20180904195021_InitialCreate

Recursos adicionalesAdditional resources