Integración de MSBuild de Entity Framework Core
A partir de EF 9, puede usar una tarea de MSBuild para generar el modelo compilado y las consultas precompiladas automáticamente cuando se compila el proyecto o cuando se publica. Esto está pensado principalmente para usarse con la publicación NativeAOT.
Advertencia
La compatibilidad con NativeAOT y la integración de MSBuild son características experimentales y aún no son adecuadas para su uso en producción.
Instalación de las tareas
Para empezar, instale el paquete NuGet Microsoft.EntityFrameworkCore.Tasks. Por ejemplo:
dotnet add package Microsoft.EntityFrameworkCore.Tasks
Nota:
Todos los proyectos que deben compilarse con archivos generados deben hacer referencia al paquete NuGet, no es transitivo de forma predeterminada.
Uso de las tareas
Si el proyecto especifica <PublishAot>true</PublishAot>
entonces, de forma predeterminada, la tarea MSBuild generará un modelo compilado y consultas precompiladas durante la publicación. De lo contrario, puede establecer las siguientes propiedades para controlar el comportamiento de generación:
Propiedad de MSBuild | Descripción |
---|---|
EFOptimizeContext | Establézcalo en true para habilitar la integración de MSBuild. |
EFScaffoldModelStage | Establezca en publish o build none para indicar en qué fase se generará el modelo compilado. Tiene como valor predeterminado publish . |
EFPrecompileQueriesStage | Establezca en publish o build none para indicar en qué fase se generarán las consultas precompiladas. Tiene como valor predeterminado publish . |
DbContextName | Clase derivada DbContext que se va a usar. Nombre de clase solo o completo con espacios de nombres. Si se omite esta opción, EF Core realizará la generación para todas las clases de contexto del proyecto. |
EFTargetNamespace | Espacio de nombres que se va a usar para todas las clases generadas. Si se omite esta opción, EF Core usará $(RootNamespace) . |
EFOutputDir | Carpeta que se va a colocar los archivos generados antes de compilar el proyecto. Si se omite esta opción, EF Core usará $(IntermediateOutputPath) . |
EFNullable | Si los tipos de referencia que aceptan valores NULL se usarán en el código generado. Si se omite esta opción, EF Core usará $(Nullable) . |
Limitaciones
- No se puede especificar un proyecto de inicio diferente al usar este enfoque, ya que introduciría una dependencia inversa de compilación. Esto significa que el proyecto de contexto debe ser autosuficiente en términos de configuración, por lo que si la aplicación normalmente configura el contexto mediante un generador de hosts en un proyecto diferente, tendría que implementar IDesignTimeDbContextFactory<TContext> en el proyecto de contexto.
- Dado que el proyecto debe compilarse antes de que se genere el modelo compilado, este enfoque no admite implementaciones parciales de métodos para la personalización del modelo compilado.
- Actualmente, esto siempre generará código adicional en el modelo compilado necesario para NativeAOT. Si no planea habilitar NativeAOT, genere el modelo compilado mediante las herramientas de la CLI.