Entity Framework Core referencia de herramientas: Administrador de paquetes Console en Visual Studio
Las herramientas Administrador de paquetes Console (PMC) para Entity Framework Core realizar tareas de desarrollo en tiempo de diseño. Por ejemplo, crean migraciones, aplicanmigraciones y generan código para un modelo basado en una base de datos existente. Los comandos se ejecutan dentro de Visual Studio mediante la consola Administrador de paquetes . Estas herramientas funcionan con proyectos de .NET Framework y .NET Core.
Si no usa el Visual Studio, se recomienda usar EF Core de línea de comandos en su lugar. Las CLI de .NET Core son multiplataforma y se ejecutan dentro de un símbolo del sistema.
Instalación de las herramientas
Instale las herramientas Administrador de paquetes Console mediante la ejecución del siguiente comando en Administrador de paquetes Console:
Install-Package Microsoft.EntityFrameworkCore.Tools
Actualice las herramientas mediante la ejecución del siguiente comando en Administrador de paquetes Console.
Update-Package Microsoft.EntityFrameworkCore.Tools
Comprobación de la instalación
Ejecute este comando para comprobar que las herramientas están instaladas:
Get-Help about_EntityFrameworkCore
La salida tiene este aspecto (no le dice qué versión de las herramientas está usando):
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
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 herramientas
Antes de usar las herramientas:
- Comprenda la diferencia entre el proyecto de destino y el proyecto de inicio.
- Obtenga información sobre cómo usar las herramientas con .NET Standard bibliotecas de clases.
- Para ASP.NET Core proyectos, establezca el entorno.
Proyecto de destino e inicio
Los comandos hacen referencia a un proyecto y a un proyecto de inicio.
El proyecto también se conoce como proyecto de destino porque es donde los comandos agregan o quitan archivos. De forma predeterminada, el proyecto predeterminado seleccionado en Administrador de paquetes console es el proyecto de destino. Puede especificar un proyecto diferente como proyecto de destino mediante el
parámetro .-ProjectEl proyecto de inicio es el que compilan y ejecutan las herramientas. 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 de la base de datos y la configuración del modelo. De forma predeterminada, el Project inicio Explorador de soluciones es el proyecto de inicio. Puede especificar un proyecto diferente como proyecto de inicio mediante el
parámetro .-StartupProject
El proyecto de inicio y el proyecto de destino suelen ser el mismo proyecto. Un escenario típico en el que son proyectos independientes es cuando:
- Las EF Core contexto y las clases de entidad están en una biblioteca de clases de .NET Core.
- Una aplicación de consola de .NET Core o una aplicación web hace referencia a la biblioteca de clases.
También es posible colocar el código de las migraciones en una biblioteca de clases independiente del EF Core contexto.
Otras plataformas de destino
Las herramientas Administrador de paquetes Console funcionan con proyectos de .NET Core .NET Framework. Es posible que las aplicaciones que EF Core modelo en una .NET Standard de clases no tengan un proyecto de .NET Core .NET Framework. Por ejemplo, esto sucede con las aplicaciones xamarin y universal Windows platform. 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. El proyecto puede ser un proyecto ficticio sin código real; solo es necesario para proporcionar un destino para las herramientas.
¿Por qué se requiere un proyecto ficticio? Como se mencionó anteriormente, las herramientas tienen que ejecutar código de aplicación en tiempo de diseño. Para ello, deben usar .NET Core o .NET Framework runtime. Cuando el EF Core está en un proyecto que tiene como destino .NET Core o .NET Framework, las herramientas de EF Core toma prestada el entorno de ejecución del proyecto. No pueden hacerlo si el modelo de EF Core está en una biblioteca .NET Standard clases. El .NET Standard no es una implementación real de .NET; es una especificación de un conjunto de API que deben admitir las implementaciones de .NET. Por .NET Standard no es suficiente para que EF Core herramientas de ejecución ejecuten código de aplicación. El proyecto ficticio que se crea para usarlo como proyecto de inicio proporciona una plataforma de destino concreta en la que las herramientas pueden cargar la .NET Standard de clases.
ASP.NET Core entorno
Para especificar el entorno para los ASP.NET Core, establezca env:ASPNETCORE_ENVIRONMENT antes de ejecutar comandos.
A partir EF Core 5.0, también se pueden pasar argumentos adicionales a Program.CreateHostBuilder, lo que permite especificar el entorno en la línea de comandos:
Update-Database -Args '--environment Production'
Parámetros comunes
En la tabla siguiente se muestran los parámetros que son comunes a todos los EF Core comandos:
| Parámetro | Descripción |
|---|---|
-Context <String> |
La clase DbContext que se va a usar. Nombre de clase solo o completo con espacios de nombres. Si se omite este parámetro, EF Core la clase de contexto. Si hay varias clases de contexto, se requiere este parámetro. |
-Project <String> |
Proyecto de destino. Si se omite este parámetro, el proyecto predeterminado para Administrador de paquetes Console se usa como proyecto de destino. |
-StartupProject <String> |
Proyecto de inicio. Si se omite este parámetro, se usa el proyecto De inicio en Propiedades de la solución como proyecto de destino. |
-Args <String> |
Argumentos pasados a la aplicación. Se ha agregado EF Core 5.0. |
-Verbose |
Mostrar resultado detallado. |
Para mostrar información de ayuda sobre un comando, use el comando de Get-Help PowerShell.
Sugerencia
Los Context parámetros , y ProjectStartupProject admiten la expansión de pestañas.
Add-Migration
Agrega una nueva migración.
Parámetros:
| Parámetro | Descripción |
|---|---|
-Name <String> |
Nombre de la migración. Se trata de un parámetro posicional y es necesario. |
-OutputDir <String> |
El directorio usa para generar los archivos. Las rutas de acceso son relativas al directorio del proyecto de destino. El valor predeterminado es "Migraciones". |
-Namespace <String> |
Espacio de nombres que se usará para las clases generadas. El valor predeterminado es generado a partir del directorio de salida. Se ha agregado EF Core 5.0. |
Los parámetros comunes se enumeran anteriormente.
Bundle-Migration
Crea un ejecutable para actualizar la base de datos.
Parámetros:
| Parámetro | Descripción |
|---|---|
-Output <String> |
Ruta de acceso del archivo ejecutable que se creará. |
-Force |
Sobrescribe los archivos existentes. |
-SelfContained |
Agrupa también el entorno de ejecución de .NET para que no sea necesario instalarlo en la máquina. |
-TargetRuntime <String> |
Tiempo de ejecución de destino para el que se agrupa. |
-Framework <String> |
La plataforma de destino. El valor predeterminado es el primero del proyecto. |
Los parámetros comunes se enumeran anteriormente.
Drop-Database
Quita la base de datos.
Parámetros:
| Parámetro | Descripción |
|---|---|
-WhatIf |
Mostrar qué base de datos se quitaría, pero no quitarla. |
Los parámetros comunes se enumeran anteriormente.
Get-DbContext
Enumera y obtiene información sobre los tipos DbContext disponibles.
Los parámetros comunes se enumeran anteriormente.
Get-Migration
Enumera las migraciones disponibles. Se ha agregado EF Core 5.0.
Parámetros:
| Parámetro | Descripción |
|---|---|
-Connection <String> |
La cadena de conexión a la base de datos. El valor predeterminado es el especificado en AddDbContext o OnConfiguring. |
-NoConnect |
No se conecte a la base de datos. |
Los parámetros comunes se enumeran anteriormente.
Optimize-DbContext
Genera una versión compilada del modelo utilizado por DbContext . Se ha agregado EF Core 6.
Consulte Modelos compilados para obtener más información.
Parámetros:
| Parámetro | Descripción |
|---|---|
-OutputDir <String> |
Directorio en el que se colocarán los archivos. Las rutas de acceso son relativas al directorio del proyecto. |
-Namespace <String> |
Espacio de nombres que se usará para todas las clases generadas. El valor predeterminado es generado a partir del espacio de nombres raíz y el directorio de salida más CompiledModels . |
Los parámetros comunes se enumeran anteriormente.
Ejemplo que usa los valores predeterminados y funciona si solo hay uno DbContext en el proyecto:
Optimize-DbContext
Ejemplo que optimiza el modelo para el contexto con el nombre especificado amd lo coloca en una carpeta y un espacio de nombres independientes:
Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext
Remove-Migration
Quita la última migración (revierte los cambios de código que se realizaron para la migración).
Parámetros:
| Parámetro | Descripción |
|---|---|
-Force |
Revierta la migración (revierta los cambios que se aplicaron a la base de datos). |
Los parámetros comunes se enumeran anteriormente.
Scaffold-DbContext
Genera código para los tipos de DbContext entidad y para una base de datos. Para generar un tipo de entidad, la tabla de base de Scaffold-DbContext datos debe tener una clave principal.
Parámetros:
| Parámetro | Descripción |
|---|---|
-Connection <String> |
La cadena de conexión a la base de datos. Para ASP.NET Core proyectos de 2.x, el valor puede ser name= nombre de la cadena de conexión >. En ese caso, el nombre procede de los orígenes de configuración configurados para el proyecto. Se trata de un parámetro posicional y es necesario. |
-Provider <String> |
Proveedor que se va a usar. Normalmente este es el nombre del paquete NuGet, por ejemplo: Microsoft.EntityFrameworkCore.SqlServer . Se trata de un parámetro posicional y es necesario. |
-OutputDir <String> |
Directorio en el que se colocarán los archivos de clase de entidad. Las rutas de acceso son relativas al directorio del proyecto. |
-ContextDir <String> |
Directorio en el que se coloca DbContext el archivo. Las rutas de acceso son relativas al directorio del proyecto. |
-Namespace <String> |
Espacio de nombres que se usará para todas las clases generadas. El valor predeterminado es generado a partir del espacio de nombres raíz y el directorio de salida. Se ha agregado EF Core 5.0. |
-ContextNamespace <String> |
Espacio de nombres que se usará para la clase DbContext generada. Nota: invalida -Namespace . Se ha agregado EF Core 5.0. |
-Context <String> |
Nombre de la clase DbContext que se generará. |
-Schemas <String[]> |
Esquemas de tablas para los que se generan tipos de entidad. Si se omite este parámetro, se incluyen todos los esquemas. |
-Tables <String[]> |
Tablas para las que se generan tipos de entidad. Si se omite este parámetro, se incluyen todas las tablas. |
-DataAnnotations |
Use atributos para configurar el modelo (siempre que sea posible). Si se omite este parámetro, solo se usa la API fluida. |
-UseDatabaseNames |
Use los nombres de tabla y columna exactamente como aparecen en la base de datos. Si se omite este parámetro, los nombres de base de datos se cambian para ajustarse más a las convenciones de estilo de nombre de C#. |
-Force |
Sobrescribe los archivos existentes. |
-NoOnConfiguring |
No genere DbContext.OnConfiguring . Se ha agregado EF Core 5.0. |
-NoPluralize |
No use el pluralizador. Se ha agregado EF Core 5.0. |
Los parámetros comunes se enumeran anteriormente.
Ejemplo:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Ejemplo de que scaffolding solo las tablas seleccionadas y crea el contexto en una carpeta independiente con un nombre y un espacio de nombres especificados:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext -ContextNamespace New.Namespace
En el ejemplo siguiente se lee la cadena de conexión de la configuración del proyecto posiblemente establecida mediante la herramienta Administrador de secretos.
Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer
Script-DbContext
Genera un script SQL a partir de DbContext. Omite las migraciones.
Parámetros:
| Parámetro | Descripción |
|---|---|
-Output <String> |
Archivo en el que se escribirá el resultado. |
Los parámetros comunes se enumeran anteriormente.
Script-Migration
Genera un script SQL que aplica todos los cambios de una migración seleccionada a otra migración seleccionada.
Parámetros:
| Parámetro | Descripción |
|---|---|
-From <String> |
Migración inicial. Las migraciones se pueden identificar por nombre o por identificador. El número 0 es un caso especial que significa antes de la primera migración. El valor predeterminado es 0. |
-To <String> |
Migración final. El valor predeterminado es la última migración. |
-Idempotent |
Genere un script que se pueda usar en una base de datos en cualquier migración. |
-NoTransactions |
No genere instrucciones SQL transacciones. Se ha agregado EF Core 5.0. |
-Output <String> |
Archivo en el que se escribirá el resultado. Si se omite este parámetro, el archivo se crea con un nombre generado en la misma carpeta que se crean los archivos en tiempo de ejecución de la aplicación, por ejemplo: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/. |
Los parámetros comunes se enumeran anteriormente.
Sugerencia
Los To parámetros , y FromOutput admiten la expansión de pestañas.
En el ejemplo siguiente se crea un script para la migración InitialCreate (desde una base de datos sin ninguna migración), con el nombre de la migración.
Script-Migration 0 InitialCreate
En el ejemplo siguiente se crea un script para todas las migraciones después de la migración InitialCreate, mediante el identificador de migración.
Script-Migration 20180904195021_InitialCreate
Update-Database
Actualiza la base de datos a la última migración o a una migración especificada.
| Parámetro | Descripción |
|---|---|
-Migration <String> |
Migración de destino. Las migraciones se pueden identificar por nombre o por identificador. El número 0 es un caso especial que significa antes de la primera migración y hace que se revierta todas las migraciones. Si no se especifica ninguna migración, el comando tiene como valor predeterminado la última migración. |
-Connection <String> |
La cadena de conexión a la base de datos. El valor predeterminado es el especificado en AddDbContext o OnConfiguring . Se ha agregado EF Core 5.0. |
Los parámetros comunes se enumeran anteriormente.
Sugerencia
El Migration parámetro admite la expansión de pestañas.
En el ejemplo siguiente se revierten todas las migraciones.
Update-Database 0
En los ejemplos siguientes se actualiza la base de datos a una migración especificada. El primero usa el nombre de migración y el segundo usa el identificador de migración y una conexión especificada:
Update-Database InitialCreate
Update-Database 20180904195021_InitialCreate -Connection your_connection_string