Servicios en tiempo de diseño
Algunos servicios usados por las herramientas solo se usan en tiempo de diseño. Estos servicios se administran por separado de los servicios en tiempo de ejecución de EF Core para evitar que se implementen con la aplicación. Para invalidar uno de estos servicios (por ejemplo, el servicio para generar archivos de migración), agregue una implementación de IDesignTimeServices
a su proyecto de inicio.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Hacer referencia a Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Design es un paquete DevelopmentDependency. Esto significa que la dependencia no fluirá de manera transitiva en otros proyectos y que no puede hacer referencia a sus tipos de forma predeterminada.
Para hacer referencia a sus tipos e invalidar los servicios en tiempo de diseño, actualice los metadatos del elemento PackageReference en el archivo de proyecto.
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.9">
<PrivateAssets>all</PrivateAssets>
<!-- Remove IncludeAssets to allow compiling against the assembly -->
<!--<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>-->
</PackageReference>
Si se hace referencia al paquete de manera transitiva a través de Microsoft.EntityFrameworkCore.Tools, tendrá que agregar una PackageReference explícita al paquete para cambiar sus metadatos.
Lista de servicios
A continuación se muestra una lista de los servicios en tiempo de diseño.
Servicio | Descripción |
---|---|
IAnnotationCodeGenerator | Genera el código para las anotaciones de modelo correspondientes. |
ICSharpHelper | Ayuda con la generación de código de C#. |
IPluralizer | Pluraliza y singulariza palabras. |
IMigrationsCodeGenerator | Genera código para una migración. |
IMigrationsScaffolder | Clase principal para administrar archivos de migración. |
IDatabaseModelFactory | Crea un modelo de base de datos a partir de una base de datos. |
IModelCodeGenerator | Genera código para un modelo. |
IProviderConfigurationCodeGenerator | Genera código OnConfiguring. |
IReverseEngineerScaffolder | La clase principal para aplicar scaffolding a modelos de ingeniería inversa. |
IScaffoldingModelFactory | Crea un modelo a partir de un modelo de base de datos. |
Uso de servicios
Estos servicios también pueden ser útiles para crear sus propias herramientas. Por ejemplo, si desea automatizar parte del flujo de trabajo en tiempo de diseño.
Puede crear un proveedor de servicios que contenga estos servicios mediante los métodos de extensión AddEntityFrameworkDesignTimeServices y AddDbContextDesignTimeServices.
var db = new MyDbContext();
// Create design-time services
var serviceCollection = new ServiceCollection();
serviceCollection.AddEntityFrameworkDesignTimeServices();
serviceCollection.AddDbContextDesignTimeServices(db);
var serviceProvider = serviceCollection.BuildServiceProvider();
// Add a migration
var migrationsScaffolder = serviceProvider.GetService<IMigrationsScaffolder>();
var migration = migrationsScaffolder.ScaffoldMigration(migrationName, rootNamespace);
migrationsScaffolder.Save(projectDir, migration, outputDir);