Referencia: consola de administrador de paquetes en Visual Studio de las herramientas de Entity Framework CoreEntity Framework Core tools reference - Package Manager Console in Visual Studio

Las herramientas de la consola de administrador de paquetes (PMC) para Entity Framework Core realizan tareas de desarrollo de tiempo de diseño.The Package Manager Console (PMC) 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 se ejecutan dentro de Visual Studio mediante el Package Manager Console.The commands run inside of Visual Studio using the Package Manager Console. Estas herramientas funcionan con proyectos de .NET Framework y .NET Core.These tools work with both .NET Framework and .NET Core projects.

Si no usa Visual Studio, se recomienda la herramientas de línea de comandos de EF Core en su lugar.If you aren't using Visual Studio, we recommend the EF Core Command-line Tools instead. Las herramientas de CLI son multiplataforma y se ejecutan dentro de un símbolo del sistema.The CLI tools are cross-platform and run inside a command prompt.

Instalación de las herramientasInstalling the tools

Los procedimientos para instalar y actualizar las herramientas difieren entre ASP.NET Core 2.1 + y versiones anteriores u otros tipos de proyecto.The procedures for installing and updating the tools differ between ASP.NET Core 2.1+ and earlier versions or other project types.

ASP.NET Core 2.1 y versiones posterioresASP.NET Core version 2.1 and later

Las herramientas se incluyen automáticamente en un proyecto de ASP.NET Core 2.1 + porque el Microsoft.EntityFrameworkCore.Tools paquete se incluye en el Microsoft.AspNetCore.App metapaquete.The tools are automatically included in an ASP.NET Core 2.1+ project because the Microsoft.EntityFrameworkCore.Tools package is included in the Microsoft.AspNetCore.App metapackage.

Por lo tanto, no tiene que hacer nada para instalar las herramientas, pero es necesario:Therefore, you don't have to do anything to install the tools, but you do have to:

  • Restaurar los paquetes antes de usar las herramientas en un proyecto nuevo.Restore packages before using the tools in a new project.
  • Instalar un paquete para actualizar las herramientas a una versión más reciente.Install a package to update the tools to a newer version.

Para asegurarse de que está obteniendo la versión más reciente de las herramientas, se recomienda que también realice el paso siguiente:To make sure that you're getting the latest version of the tools, we recommend that you also do the following step:

  • Editar su .csproj archivo y agregue una línea que especifica la versión más reciente de la Microsoft.EntityFrameworkCore.Tools paquete.Edit your .csproj file and add a line specifying the latest version of the Microsoft.EntityFrameworkCore.Tools package. Por ejemplo, el .csproj archivo puede incluir un ItemGroup similar a este:For example, the .csproj file might include an ItemGroup that looks like this:

    <ItemGroup>
      <PackageReference Include="Microsoft.AspNetCore.App" />
      <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.3" />
      <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.1" />
    </ItemGroup>
    

Actualizar las herramientas cuando reciba un mensaje similar al ejemplo siguiente:Update the tools when you get a message like the following example:

La versión de herramientas de EF Core '2.1.1-rtm-30846' es mayor que el tiempo de ejecución '2.1.3-rtm-32065'.The EF Core tools version '2.1.1-rtm-30846' is older than that of the runtime '2.1.3-rtm-32065'. Actualizar las herramientas para las últimas características y correcciones de errores.Update the tools for the latest features and bug fixes.

Para actualizar las herramientas:To update the tools:

  • Instale el SDK de .NET Core más reciente.Install the latest .NET Core SDK.
  • Actualización a la versión más reciente de Visual Studio.Update Visual Studio to the latest version.
  • Editar el .csproj de archivos para que incluya una referencia de paquete para el paquete de herramientas más reciente, como se mostró anteriormente.Edit the .csproj file so that it includes a package reference to the latest tools package, as shown earlier.

Otras versiones y tipos de proyectoOther versions and project types

Instalar las herramientas de la consola de administrador de paquetes con el comando siguiente Package Manager Console:Install the Package Manager Console tools by running the following command in Package Manager Console:

Install-Package Microsoft.EntityFrameworkCore.Tools

Actualizar las herramientas ejecutando el siguiente comando en Package Manager Console.Update the tools by running the following command in Package Manager Console.

Update-Package Microsoft.EntityFrameworkCore.Tools

Comprobar la instalaciónVerify the installation

Compruebe que las herramientas están instaladas, ejecute este comando:Verify that the tools are installed by running this command:

Get-Help about_EntityFrameworkCore

El resultado será similar al siguiente (no le diga qué versión de las herramientas que se usa):The output looks like this (it doesn't tell you which version of the tools you're using):


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

TOPIC
    about_EntityFrameworkCore

SHORT DESCRIPTION
    Provides information about the Entity Framework Core Package Manager Console Tools.

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

Uso de las herramientasUsing the tools

Antes de usar las herramientas:Before using the tools:

  • Comprender la diferencia entre el proyecto de inicio y de destino.Understand the difference between target and startup project.
  • Obtenga información sobre cómo usar las herramientas con las bibliotecas de clases .NET Standard.Learn how to use the tools with .NET Standard class libraries.
  • Para los proyectos de ASP.NET Core, establezca el entorno.For ASP.NET Core projects, set the environment.

Proyecto de inicio y de destinoTarget 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 predeterminado seleccionado en Package Manager Console es el proyecto de destino.By default, the Default project selected in Package Manager Console 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 de inicio en el Explorador de soluciones es el proyecto de inicio.By default, the Startup Project in Solution Explorer 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 de la consola de administrador de paquetes de trabajar con proyectos de .NET Core o .NET Framework.The Package Manager Console tools work with .NET Core or .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 o .NET Framework cuyo único propósito es actuar como proyecto de inicio para las herramientas.In such cases, you can create a .NET Core or .NET Framework 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 o .NET Framework.To do that, they need to use the .NET Core or .NET Framework 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 env:ASPNETCORE_ENVIRONMENT antes de ejecutar comandos.To specify the environment for ASP.NET Core projects, set env:ASPNETCORE_ENVIRONMENT before running commands.

Parámetros comunesCommon parameters

La siguiente tabla muestra los parámetros que son comunes a todos los comandos de EF Core:The following table shows parameters that are common to all of the EF Core commands:

ParámetroParameter DescripciónDescription
-Contexto <cadena >-Context <String> La DbContext clase se debe utilizar.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 este parámetro, EF Core busca la clase de contexto.If this parameter is omitted, EF Core finds the context class. Si hay varias clases de contexto, este parámetro es necesario.If there are multiple context classes, this parameter is required.
-Proyecto <cadena >-Project <String> El proyecto de destino.The target project. Si se omite este parámetro, el proyecto predeterminado para Package Manager Console se utiliza como el proyecto de destino.If this parameter is omitted, the Default project for Package Manager Console is used as the target project.
Proyecto de inicio - <cadena >-StartupProject <String> El proyecto de inicio.The startup project. Si se omite este parámetro, el proyecto de inicio en propiedades de la solución se utiliza como el proyecto de destino.If this parameter is omitted, the Startup project in Solution properties is used as the target project.
-Verbose-Verbose Mostrar resultados detallados.Show verbose output.

Para mostrar información de ayuda sobre un comando, use PowerShell Get-Help comando.To show help information about a command, use PowerShell's Get-Help command.

Sugerencia

Los parámetros de contexto, el proyecto y el proyecto de inicio admiten la expansión de ficha.The Context, Project, and StartupProject parameters support tab-expansion.

Add-MigrationAdd-Migration

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

Parámetros:Parameters:

ParámetroParameter DescripciónDescription
-Nombre <cadena >-Name <String> El nombre de la migración.The name of the migration. Esto es un parámetro posicional y es necesario.This is a positional parameter and is required.
-OutputDir <cadena >-OutputDir <String> El directorio (y subespacio de nombres) para usar.The directory (and sub-namespace) to use. Son las rutas de acceso relativa al directorio del proyecto de destino.Paths are relative to the target project directory. El valor predeterminado es "Migraciones".Defaults to "Migrations".

Quitar la base de datosDrop-Database

Quita la base de datos.Drops the database.

Parámetros:Parameters:

ParámetroParameter DescripciónDescription
-WhatIf-WhatIf Mostrar qué base de datos se quitarían, pero no colóquelo.Show which database would be dropped, but don't drop it.

Get-DbContextGet-DbContext

Listas disponibles DbContext tipos.Lists available DbContext types.

Remove-MigrationRemove-Migration

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).

Parámetros:Parameters:

ParámetroParameter DescripciónDescription
-Force-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).

Scaffold-DbContextScaffold-DbContext

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. En orden para Scaffold-DbContext para generar un tipo de entidad, la tabla de base de datos debe tener una clave principal.In order for Scaffold-DbContext to generate an entity type, the database table must have a primary key.

Parámetros:Parameters:

ParámetroParameter DescripciónDescription
-Connection <cadena >-Connection <String> 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. Esto es un parámetro posicional y es necesario.This is a positional parameter and is required.
-Proveedor <cadena >-Provider <String> 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. Esto es un parámetro posicional y es necesario.This is a positional parameter and is required.
-OutputDir <cadena >-OutputDir <String> Para poner los archivos en el directorio.The directory to put files in. Las rutas de acceso son relativas al directorio de proyecto.Paths are relative to the project directory.
-ContextDir <cadena >-ContextDir <String> El directorio para colocar el DbContext archivo.The directory to put the DbContext file in. Las rutas de acceso son relativas al directorio de proyecto.Paths are relative to the project directory.
-Contexto <cadena >-Context <String> El nombre de la DbContext clase genere.The name of the DbContext class to generate.
-Esquemas <String [] >-Schemas <String[]> Los esquemas de tablas para generar tipos de entidad para.The schemas of tables to generate entity types for. Si se omite este parámetro, se incluyen todos los esquemas.If this parameter is omitted, all schemas are included.
-Tablas <String [] >-Tables <String[]> Para generar tipos de entidad para las tablas.The tables to generate entity types for. Si se omite este parámetro, se incluyen todas las tablas.If this parameter is omitted, all tables are included.
-DataAnnotations-DataAnnotations Usar atributos para configurar el modelo (donde sea posible).Use attributes to configure the model (where possible). Si se omite este parámetro, se usa solo la API fluida.If this parameter is omitted, only the fluent API is used.
-UseDatabaseNames-UseDatabaseNames 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 este parámetro, se cambian los nombres de base de datos que mejor se ajuste a convenciones de estilo de nombre de C#.If this parameter is omitted, database names are changed to more closely conform to C# name style conventions.
-Force-Force Sobrescribir archivos existentes.Overwrite existing files.

Ejemplo:Example:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Ejemplo que se aplica la técnica scaffolding únicamente las tablas seleccionadas y crea el contexto en una carpeta independiente con un nombre especificado:Example that scaffolds only selected tables and creates the context in a separate folder with a specified name:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext

Migración de scriptsScript-Migration

Genera un script SQL que se aplica a todos los cambios de una migración seleccionada a otra migración seleccionado.Generates a SQL script that applies all of the changes from one selected migration to another selected migration.

Parámetros:Parameters:

ParámetroParameter DescripciónDescription
-Desde <cadena >-From <String> 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.
-A <cadena >-To <String> La migración final.The ending migration. De forma predeterminada a la última migración.Defaults to the last migration.
-Idempotente-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.
-Output <cadena >-Output <String> Para escribir el resultado en el archivo.The file to write the result to. Si se omite este parámetro, se crea el archivo con un nombre generado en la misma carpeta cuando se crean archivos de tiempo de ejecución de la aplicación, por ejemplo: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/.IF this parameter is omitted, the file is created with a generated name in the same folder as the app's runtime files are created, for example: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/.

Sugerencia

El To, From, y los parámetros de salida admiten la expansión de ficha.The To, From, and Output parameters support tab-expansion.

El ejemplo siguiente crea una secuencia de comandos para la migración de InitialCreate, usando el nombre de la migración.The following example creates a script for the InitialCreate migration, using the migration name.

Script-Migration -To InitialCreate

En el ejemplo siguiente se crea una secuencia de comandos para todas las migraciones tras la migración InitialCreate, utilizando el identificador de la migración.The following example creates a script for all migrations after the InitialCreate migration, using the migration ID.

Script-Migration -From 20180904195021_InitialCreate

Actualizar base de datosUpdate-Database

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.

ParámetroParameter DescripciónDescription
-Migración <cadena >-Migration <String> 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.

Sugerencia

El parámetro de la migración es compatible con la expansión de ficha.The Migration parameter supports tab-expansion.

El ejemplo siguiente devuelve todas las migraciones.The following example reverts all migrations.

Update-Database -Migration 0

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:

Update-Database -Migration InitialCreate
Update-Database -Migration 20180904195021_InitialCreate