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

Las herramientas de la consola del administrador de paquetes (PMC) para Entity Framework Core realizar tareas de desarrollo en tiempo de diseño.The Package Manager Console (PMC) tools for Entity Framework Core perform design-time development tasks. Por ejemplo, se crean migraciones, se aplican migraciones y se genera 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 la consola del administrador de paquetes.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 usar en su lugar las herramientas de línea de comandos de EF Core .If you aren't using Visual Studio, we recommend the EF Core Command-line Tools instead. Las herramientas de la CLI son multiplataforma y se ejecutan en 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 versión 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 paquete de Microsoft.EntityFrameworkCore.Tools se incluye en el metapaquete Microsoft. AspNetCore. app.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 tiene que:Therefore, you don't have to do anything to install the tools, but you do have to:

  • Restaure los paquetes antes de usar las herramientas en un nuevo proyecto.Restore packages before using the tools in a new project.
  • Instale 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 realice también el siguiente paso:To make sure that you're getting the latest version of the tools, we recommend that you also do the following step:

  • Edite el archivo . csproj y agregue una línea que especifique la versión más reciente del paquete Microsoft. EntityFrameworkCore. Tools .Edit your .csproj file and add a line specifying the latest version of the Microsoft.EntityFrameworkCore.Tools package. Por ejemplo, el archivo . csproj podría incluir un ItemGroup que tiene este aspecto: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>
    

Actualice las herramientas cuando reciba un mensaje similar al del 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 anterior a la del runtime ' 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'. Actualice 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 la SDK de .NET Core más reciente.Install the latest .NET Core SDK.
  • Actualice Visual Studio a la versión más reciente.Update Visual Studio to the latest version.
  • Edite el archivo . csproj para que incluya una referencia de paquete al 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

Instale las herramientas de la consola del administrador de paquetes ejecutando el siguiente comando en la consola del administrador de paquetes:Install the Package Manager Console tools by running the following command in Package Manager Console:

Install-Package Microsoft.EntityFrameworkCore.Tools

Actualice las herramientas ejecutando el siguiente comando en la consola del administrador de paquetes.Update the tools by running the following command in Package Manager Console.

Update-Package Microsoft.EntityFrameworkCore.Tools

Comprobar la instalaciónVerify the installation

Ejecute este comando para comprobar que las herramientas están instaladas:Verify that the tools are installed by running this command:

Get-Help about_EntityFrameworkCore

La salida tiene el siguiente aspecto (no indica qué versión de las herramientas está usando):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:

  • Comprenda la diferencia entre el proyecto de destino y el de inicio.Understand the difference between target and startup project.
  • Aprenda a usar las herramientas con .NET Standard bibliotecas de clases.Learn how to use the tools with .NET Standard class libraries.
  • En el caso de los proyectos de ASP.NET Core, establezca el entorno.For ASP.NET Core projects, set the environment.

Proyecto de destino e inicioTarget and startup project

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

  • El proyecto también se conoce como proyecto de destino porque es donde los comandos agregan o quitan 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 la consola del administrador de paquetes 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 la opción --project .You can specify a different project as target project by using the --project option.

  • El proyecto de inicio es el que las herramientas compilan y ejecutan.The startup project is the one that the tools build and run. Las herramientas tienen que ejecutar código de aplicación en tiempo de diseño para obtener información sobre el proyecto, como la cadena de conexión a la 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 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 la opción --startup-project .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 en el que se trata de proyectos independientes es cuando:A typical scenario where they are separate projects is when:

  • El contexto de EF Core y las clases de entidad se encuentran 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 de .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 el código de las migraciones en una biblioteca de clases independiente del contexto de EF Core.It's also possible to put migrations code in a class library separate from the EF Core context.

Otras plataformas de destinoOther target frameworks

Las herramientas de la consola del administrador de paquetes funcionan con proyectos de .NET Core o .NET Framework.The Package Manager Console tools work with .NET Core or .NET Framework projects. Es posible que las aplicaciones que tienen el modelo de EF Core en una biblioteca de clases .NET Standard no tengan un proyecto de .NET Core o .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. Por ejemplo, esto es cierto para las aplicaciones 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 de .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 para 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 necesario un proyecto ficticio?Why is a dummy project required? Como se mencionó anteriormente, las herramientas tienen que ejecutar código de aplicación en tiempo de diseño.As mentioned earlier, the tools have to execute application code at design time. Para ello, deben usar .NET Core o .NET Framework Runtime.To do that, they need to use the .NET Core or .NET Framework runtime. Cuando el modelo de EF Core está en un proyecto que tiene como destino .NET Core o .NET Framework, las herramientas de EF Core toman 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 pueden 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. El .NET Standard no es una implementación real de .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 que las herramientas de EF Core ejecuten código de aplicación.Therefore .NET Standard is not sufficient for the EF Core tools to execute application code. El proyecto ficticio que cree para usarlo como proyecto de inicio proporciona una plataforma de destino concreta en la que las herramientas pueden cargar la biblioteca de clases de .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 de ASP.NET Core proyectos, establezca env: ASPNETCORE_ENVIRONMENT antes de ejecutar los comandos.To specify the environment for ASP.NET Core projects, set env:ASPNETCORE_ENVIRONMENT before running commands.

Parámetros comunesCommon parameters

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

ParámetroParameter DescripciónDescription
-Context <cadena >-Context <String> La clase DbContext que se va a usar.The DbContext class to use. Nombre de clase solo o completo con espacios de nombres.Class name only or fully qualified with namespaces. Si se omite este parámetro, EF Core encuentra 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 obligatorio.If there are multiple context classes, this parameter is required.
-Project <cadena >-Project <String> Proyecto de destino.The target project. Si se omite este parámetro, el proyecto predeterminado de la consola del administrador de paquetes se utiliza como proyecto de destino.If this parameter is omitted, the Default project for Package Manager Console is used as the target project.
-Proyecto <cadena >-StartupProject <String> Proyecto de inicio.The startup project. Si se omite este parámetro, el proyecto de inicio de las propiedades de la solución se usa como proyecto de destino.If this parameter is omitted, the Startup project in Solution properties is used as the target project.
-Verbose-Verbose Mostrar resultado detallado.Show verbose output.

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

Sugerencia

Los parámetros context, Project y proyecto admiten la expansión de pestañas.The Context, Project, and StartupProject parameters support tab-expansion.

Agregar-migraciónAdd-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. Este es un parámetro posicional y es obligatorio.This is a positional parameter and is required.
-OutputDir <cadena >-OutputDir <String> Directorio (y subespacio de nombres) que se va a usar.The directory (and sub-namespace) to use. Las rutas de acceso son relativas al directorio del proyecto de destino.Paths are relative to the target project directory. El valor predeterminado es "migraciones".Defaults to "Migrations".

Drop-DatabaseDrop-Database

Quita la base de datos.Drops the database.

Parámetros:Parameters:

ParámetroParameter DescripciónDescription
-WhatIf-WhatIf Mostrar la base de datos que se va a quitar, pero no quitarla.Show which database would be dropped, but don't drop it.

Get-DbContextGet-DbContext

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

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. Para que Scaffold-DbContext genere 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> Cadena de conexión a la base de datos.The connection string to the database. En el caso de los proyectos de ASP.NET Core 2. x, el valor puede ser Name =<nombre de la 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. Este es un parámetro posicional y es obligatorio.This is a positional parameter and is required.
-Provider <cadena >-Provider <String> Proveedor que se va a usar.The provider to use. Normalmente, 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. Este es un parámetro posicional y es obligatorio.This is a positional parameter and is required.
-OutputDir <cadena >-OutputDir <String> Directorio en el que se colocarán los archivos.The directory to put files in. Las rutas de acceso son relativas al directorio del proyecto.Paths are relative to the project directory.
-ContextDir <cadena >-ContextDir <String> Directorio en el que se va a colocar el archivo de DbContext.The directory to put the DbContext file in. Las rutas de acceso son relativas al directorio del proyecto.Paths are relative to the project directory.
-Context <cadena >-Context <String> Nombre de la clase DbContext que se va a generar.The name of the DbContext class to generate.
-Schemas <String [] >-Schemas <String[]> Esquemas de las tablas para las que se van a generar tipos de entidad.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.
-Tables <String [] >-Tables <String[]> Tablas para las que se van a generar tipos de entidad.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 Use los atributos para configurar el modelo (siempre que sea posible).Use attributes to configure the model (where possible). Si se omite este parámetro, solo se usa la API fluida.If this parameter is omitted, only the fluent API is used.
-UseDatabaseNames-UseDatabaseNames Utilice 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, los nombres de base de datos se cambian para C# ajustarse mejor a las convenciones de estilo de nombre.If this parameter is omitted, database names are changed to more closely conform to C# name style conventions.
-Force-Force Sobrescribe los archivos existentes.Overwrite existing files.

Ejemplo:Example:

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

Ejemplo que scaffolding solo selecciona tablas 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

Script: migraciónScript-Migration

Genera un script SQL que aplica todos los cambios de una migración seleccionada a otra migración seleccionada.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 nombre o por 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.
-Para <cadena >-To <String> La migración final.The ending migration. Tiene como valor predeterminado 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> Archivo en el que se va a escribir el resultado.The file to write the result to. Si se omite este parámetro, el archivo se crea con un nombre generado en la misma carpeta en que se crean los archivos en 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

Los parámetros para, de y de salida admiten la expansión de pestañas.The To, From, and Output parameters support tab-expansion.

En el ejemplo siguiente se crea un script para la migración de InitialCreate con 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 un script para todas las migraciones después de la migración de InitialCreate con el identificador de 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
-<de la cadena de migración >-Migration <String> La migración de destino.The target migration. Las migraciones pueden identificarse por nombre o por 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 se reviertan todas las migraciones.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, el comando toma como valor predeterminado la última migración.If no migration is specified, the command defaults to the last migration.

Sugerencia

El parámetro Migration admite la expansión de pestañas.The Migration parameter supports tab-expansion.

En el ejemplo siguiente se revierten todas las migraciones.The following example reverts all migrations.

Update-Database -Migration 0

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

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

Recursos adicionalesAdditional resources