Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Algunos servicios usados por las herramientas solo se utilizan en la fase 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á transitivamente 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="9.0.0">
<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 forma transitiva a través de Microsoft.EntityFrameworkCore.Tools, deberá agregar una packageReference explícita al paquete y cambiar sus metadatos.
Lista de servicios
A continuación se muestra una lista de los servicios de tiempo de diseño.
| Service | Description |
|---|---|
| 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. |
| ICSharpMigrationOperationGenerator | Genera código de C# para las operaciones de migración. |
| ICSharpSnapshotGenerator | Genera código de C# para instantáneas de modelo. |
| IMigrationsCodeGenerator | Genera código para una migración. |
| IMigrationsCodeGeneratorSelector | Selecciona el generador de código de migraciones adecuado. |
| IMigrationsScaffolder | Clase principal para administrar archivos de migración. |
| ICompiledModelCodeGenerator | Genera código para los metadatos del modelo compilado. |
| ICompiledModelCodeGeneratorSelector | Selecciona el generador de código de modelo compilado adecuado. |
| ICompiledModelScaffolder | La clase principal para los modelos compilados de scaffolding. |
| IDatabaseModelFactory | Crea un modelo de base de datos a partir de una base de datos. |
| IModelCodeGenerator | Genera código para un modelo. |
| IModelCodeGeneratorSelector | Selecciona el generador de código de modelo adecuado. |
| IProviderConfigurationCodeGenerator | Genera código OnConfiguring. |
| IReverseEngineerScaffolder | La clase principal para aplicar el andamiaje a modelos generados mediante ingeniería inversa. |
| IScaffoldingModelFactory | Crea un modelo a partir de un modelo de base de datos. |
| IPrecompiledQueryCodeGenerator | Genera código para consultas precompiladas. |
| IPrecompiledQueryCodeGeneratorSelector | Selecciona el generador de código de consulta precompilado adecuado. |
Uso de servicios
Estos servicios también pueden ser útiles para crear sus propias herramientas. Por ejemplo, cuando 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.
using var db = new MyDbContext();
// Create design-time services
var serviceCollection = new ServiceCollection();
serviceCollection.AddDbContextDesignTimeServices(db);
var provider = db.GetService<IDatabaseProvider>().Name;
var providerAssembly = Assembly.Load(new AssemblyName(provider));
var providerServicesAttribute = providerAssembly.GetCustomAttribute<DesignTimeProviderServicesAttribute>();
var designTimeServicesType = providerAssembly.GetType(providerServicesAttribute.TypeName, throwOnError: true);
((IDesignTimeServices)Activator.CreateInstance(designTimeServicesType)!).ConfigureDesignTimeServices(serviceCollection);
serviceCollection.AddEntityFrameworkDesignTimeServices();
var serviceProvider = serviceCollection.BuildServiceProvider();
// Add a migration
var migrationsScaffolder = serviceProvider.GetRequiredService<IMigrationsScaffolder>();
var migration = migrationsScaffolder.ScaffoldMigration(migrationName, rootNamespace);
migrationsScaffolder.Save(projectDir, migration, outputDir);