referencia Entity Framework Core herramientas de CLI de .NET Core
Las herramientas de la interfaz de línea de comandos (CLI) 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 son una extensión del comando dotnet multiplataforma, que forma parte del SDK de .NET Core. Estas herramientas funcionan con proyectos de .NET Core.
Al usar Visual Studio, considere la posibilidad de usar las herramientas Administrador de paquetes Console en lugar de las herramientas de la CLI. Administrador de paquetes herramientas de consola automáticamente:
- Funciona con el proyecto actual seleccionado en la consola Administrador de paquetes sin necesidad de cambiar manualmente los directorios.
- Abre los archivos generados por un comando una vez completado el comando.
- Proporciona la finalización con tabulación de comandos, parámetros, nombres de proyecto, tipos de contexto y nombres de migración.
Instalación de las herramientas
dotnet ef se puede instalar como una herramienta global o local. La mayoría de los desarrolladores prefieren instalar dotnet ef como herramienta global con el siguiente comando:
dotnet tool install --global dotnet-ef
Para usarlo como herramienta local, restaure las dependencias de un proyecto que lo declare como dependencia de herramientas mediante un archivo de manifiesto de herramientas.
Actualice la herramienta con el comando siguiente:
dotnet tool update --global dotnet-ef
Para poder usar las herramientas en un proyecto específico, deberá agregarle Microsoft.EntityFrameworkCore.Design el paquete.
dotnet add package Microsoft.EntityFrameworkCore.Design
Comprobación de la instalación
Ejecute los siguientes comandos para comprobar que las herramientas EF Core CLI están instaladas correctamente:
dotnet ef
La salida del comando identifica la versión de las herramientas en uso:
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
Entity Framework Core .NET Command-line Tools 2.1.3-rtm-32065
<Usage documentation follows, not shown.>
Actualización de las herramientas
Use dotnet tool update --global dotnet-ef para actualizar las herramientas globales a la versión más reciente disponible. Si tiene las herramientas instaladas localmente en el proyecto, use dotnet tool update dotnet-ef . Instale una versión específica anexando --version <VERSION> al comando. Consulte la sección Actualización de la documentación de la herramienta dotnet para obtener más detalles.
Uso de las herramientas
Antes de usar las herramientas, es posible que tenga que crear un proyecto de inicio o establecer el entorno.
Proyecto de destino y proyecto de 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 del directorio actual es el proyecto de destino. Puede especificar un proyecto diferente como proyecto de destino mediante la
opción .--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 proyecto del directorio actual es el proyecto de inicio. Puede especificar un proyecto diferente como proyecto de inicio mediante la
opción .--startup-project
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 código de migraciones en una biblioteca de clases independiente del EF Core contexto.
Otras plataformas de destino
Las herramientas de la CLI funcionan con proyectos de .NET Core .NET Framework proyectos. Es posible que las aplicaciones que EF Core modelo en una biblioteca .NET Standard 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 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 el entorno de ejecución de .NET Core. Cuando el EF Core está en un proyecto que tiene como destino .NET Core o .NET Framework, las herramientas EF Core toman prestada el tiempo 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 las implementaciones de .NET deben admitir. Por .NET Standard no es suficiente para que las herramientas EF Core 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 .NET Standard biblioteca de clases.
ASP.NET Core entorno
Para especificar el entorno para los ASP.NET Core, establezca la variable ASPNETCORE_ENVIRONMENT de entorno 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:
dotnet ef database update -- --environment Production
Sugerencia
El token dirige a tratar todo lo que sigue como argumento y no intentar --dotnet ef analizarlos como opciones. Los argumentos adicionales que no usa dotnet ef se reenvía a la aplicación.
Opciones comunes
| Opción | Short | Descripción |
|---|---|---|
--json |
Mostrar salida JSON. | |
--context <DBCONTEXT> |
-c |
La clase DbContext que se va a usar. Solo nombre de clase o completo con espacios de nombres. Si se omite esta opción, EF Core la clase de contexto. Si hay varias clases de contexto, esta opción es obligatoria. |
--project <PROJECT> |
-p |
Ruta de acceso relativa a la carpeta del proyecto de destino. El valor predeterminado es la carpeta actual. |
--startup-project <PROJECT> |
-s |
Ruta de acceso relativa a la carpeta del proyecto de inicio. El valor predeterminado es la carpeta actual. |
--framework <FRAMEWORK> |
Moniker de la plataforma de destino para la plataforma de destino. Use cuando el archivo de proyecto especifique varias plataformas de destino y desee seleccionar una de ellas. | |
--configuration <CONFIGURATION> |
La configuración de compilación, por ejemplo: Debug o Release . |
|
--runtime <IDENTIFIER> |
Identificador del tiempo de ejecución de destino para el que se restaurarán los paquetes. Para obtener una lista de identificadores de tiempo de ejecución (RID), consulte el catálogo de RID. | |
--no-build |
No compile el proyecto. Diseñado para usarse cuando la compilación está actualizada. | |
--help |
-h |
Muestra información de ayuda. |
--verbose |
-v |
Mostrar resultado detallado. |
--no-color |
No coloree la salida. | |
--prefix-output |
Salida de prefijo con nivel. |
A partir EF Core 5.0, los argumentos adicionales se pasan a la aplicación.
dotnet ef database drop
Elimina la base de datos.
Opciones:
| Opción | Short | Descripción |
|---|---|---|
--force |
-f |
No lo confirme. |
--dry-run |
Mostrar qué base de datos se quitaría, pero no quitarla. |
Las opciones comunes se enumeran anteriormente.
dotnet ef database update
Actualiza la base de datos a la última migración o a una migración especificada.
Argumentos:
| Argumento | Descripción |
|---|---|
<MIGRATION> |
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. |
Opciones:
| Opción | Descripción |
|---|---|
--connection <CONNECTION> |
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. |
Las opciones comunes se enumeran anteriormente.
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:
dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate --connection your_connection_string
dotnet ef dbcontext info
Obtiene información sobre un DbContext tipo.
Las opciones comunes se enumeran anteriormente.
dotnet ef dbcontext list
Enumera los tipos DbContext disponibles.
Las opciones comunes se enumeran anteriormente.
dotnet ef dbcontext optimize
Genera una versión compilada del modelo utilizado por DbContext . Se agregó en EF Core 6.
Vea Modelos compilados para obtener más información.
Opciones:
| Opción | Short | Descripción |
|---|---|---|
--output-dir <PATH> |
-o |
Directorio en el que se colocarán los archivos. Las rutas de acceso son relativas al directorio del proyecto. |
--namespace <NAMESPACE> |
-n |
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 . |
Las opciones comunes se enumeran anteriormente.
En el ejemplo siguiente se usa la configuración predeterminada y funciona si solo hay DbContext una en el proyecto:
dotnet ef dbcontext optimize
En el ejemplo siguiente se optimiza el modelo para el contexto con el nombre especificado y se coloca en una carpeta y un espacio de nombres independientes:
dotnet ef dbcontext optimize -o Models -n BlogModels -c BlogContext
dotnet ef dbcontext scaffold
Genera código para los tipos de DbContext entidad y para una base de datos. Para que este comando genere un tipo de entidad, la tabla de base de datos debe tener una clave principal.
Argumentos:
| Argumento | Descripción |
|---|---|
<CONNECTION> |
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. |
<PROVIDER> |
Proveedor que se va a usar. Normalmente, este es el nombre del paquete NuGet, por ejemplo: Microsoft.EntityFrameworkCore.SqlServer . |
Opciones:
| Opción | Short | Descripción |
|---|---|---|
--data-annotations |
-d |
Use atributos para configurar el modelo (siempre que sea posible). Si se omite esta opción, solo se usa la API fluida. |
--context <NAME> |
-c |
Nombre de la clase DbContext que se generará. |
--context-dir <PATH> |
Directorio en el que se DbContext colocará el archivo de clase. Las rutas de acceso son relativas al directorio del proyecto. Los espacios de nombres se derivan de los nombres de carpeta. |
|
--context-namespace <NAMESPACE> |
Espacio de nombres que se usará para la clase DbContext generada. Nota: invalida --namespace . Se ha agregado EF Core 5.0. |
|
--force |
-f |
Sobrescribe los archivos existentes. |
--output-dir <PATH> |
-o |
Directorio en el que se colocarán los archivos de clase de entidad. Las rutas de acceso son relativas al directorio del proyecto. |
--namespace <NAMESPACE> |
-n |
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. |
--schema <SCHEMA_NAME>... |
Esquemas de tablas para los que se generan tipos de entidad. Para especificar varios esquemas, repita --schema para cada uno de ellos. Si se omite esta opción, se incluyen todos los esquemas. |
|
--table <TABLE_NAME>... |
-t |
Tablas para las que se generan tipos de entidad. Para especificar varias tablas, repita -t o --table para cada una. Si se omite esta opción, se incluyen todas las tablas. |
--use-database-names |
Use nombres de tabla y columna exactamente como aparecen en la base de datos. Si se omite esta opción, los nombres de base de datos se cambian para ajustarse más estrechamente a las convenciones de estilo de nombre de C#. | |
--no-onconfiguring |
Suprime la generación del OnConfiguring método en la clase DbContext generada. Se ha agregado EF Core 5.0. |
|
--no-pluralize |
No use el pluralizador. Se agregó en EF Core 5.0 |
Las opciones comunes se enumeran anteriormente.
En el ejemplo siguiente se scaffolding todos los esquemas y tablas y se coloca los nuevos archivos en la carpeta Models.
dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
En el ejemplo siguiente se scaffolding solo las tablas seleccionadas y se crea el contexto en una carpeta independiente con un nombre y un espacio de nombres especificados:
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 --context-namespace New.Namespace
En el ejemplo siguiente se lee la cadena de conexión del conjunto de configuración del proyecto mediante la herramienta Secret Manager.
dotnet user-secrets set ConnectionStrings:Blogging "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Blogging"
dotnet ef dbcontext scaffold Name=ConnectionStrings:Blogging Microsoft.EntityFrameworkCore.SqlServer
En el ejemplo siguiente se omite el scaffolding de un OnConfiguring método. Esto puede ser útil cuando se desea configurar DbContext fuera de la clase . Por ejemplo, ASP.NET Core aplicaciones suelen configurarlo en Startup.ConfigureServices. Se ha agregado EF Core 5.0.
dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;User Id=myUsername;Password=myPassword;" Microsoft.EntityFrameworkCore.SqlServer --no-onconfiguring
dotnet ef dbcontext script
Genera un script SQL a partir de DbContext. Omite las migraciones.
Opciones:
| Opción | Short | Descripción |
|---|---|---|
--output <FILE> |
-o |
Archivo en el que se escribirá el resultado. |
Las opciones comunes se enumeran anteriormente.
dotnet ef migrations add
Agrega una nueva migración.
Argumentos:
| Argumento | Descripción |
|---|---|
<NAME> |
Nombre de la migración. |
Opciones:
| Opción | Short | Descripción |
|---|---|---|
--output-dir <PATH> |
-o |
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 <NAMESPACE> |
-n |
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. |
Las opciones comunes se enumeran anteriormente.
dotnet ef migrations bundle
Crea un ejecutable para actualizar la base de datos.
Opciones:
| Opción | Short | Descripción |
|---|---|---|
--output <FILE> |
-o |
Ruta de acceso del archivo ejecutable que se creará. |
--force |
-f |
Sobrescribe los archivos existentes. |
--self-contained |
Agrupa también el entorno de ejecución de .NET para que no sea necesario instalarlo en la máquina. | |
--target-runtime <RUNTIME_IDENTIFIER> |
-r |
Tiempo de ejecución de destino para el que se agrupa. |
Las opciones comunes se enumeran anteriormente.
dotnet ef migrations list
Enumera las migraciones disponibles.
Opciones:
| Opción | Descripción |
|---|---|
--connection <CONNECTION> |
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. |
--no-connect |
No se conecte a la base de datos. Se ha agregado EF Core 5.0. |
Las opciones comunes se enumeran anteriormente.
dotnet ef migrations remove
Quita la última migración, re rolling back the code changes that were done for the latest migration.
Opciones:
| Opción | Short | Descripción |
|---|---|---|
--force |
-f |
Revierta la migración más reciente y revierta los cambios de código y base de datos que se realizaron para la migración más reciente. Continúa revierte solo los cambios de código si se produce un error al conectarse a la base de datos. |
Las opciones comunes se enumeran anteriormente.
dotnet ef migrations script
Genera un script SQL a partir de las migraciones.
Argumentos:
| Argumento | Descripción |
|---|---|
<FROM> |
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> |
Migración final. El valor predeterminado es la última migración. |
Opciones:
| Opción | Short | Descripción |
|---|---|---|
--output <FILE> |
-o |
Archivo en el que se escribirá el script. |
--idempotent |
-i |
Genere un script que se pueda usar en una base de datos en cualquier migración. |
--no-transactions |
No genere instrucciones SQL transacciones. Se ha agregado EF Core 5.0. |
Las opciones comunes se enumeran anteriormente.
En el ejemplo siguiente se crea un script para la migración InitialCreate:
dotnet ef migrations script 0 InitialCreate
En el ejemplo siguiente se crea un script para todas las migraciones después de la migración InitialCreate.
dotnet ef migrations script 20180904195021_InitialCreate