Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Některé služby používané nástroji se používají pouze v době návrhu. Tyto služby se spravují odděleně od služeb modulu runtime EF Core, aby se zabránilo jejich nasazení s vaší aplikací. Pokud chcete přepsat jednu z těchto služeb (například službu pro generování souborů migrace), přidejte do svého spouštěcího projektu implementaci IDesignTimeServices.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Odkazování na Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Design je balíček DevelopmentDependency. To znamená, že závislost nebude přechodně přetékat do jiných projektů a ve výchozím nastavení nebude možné odkazovat na její typy.
Pokud chcete odkazovat na jeho typy a přepsat služby v době návrhu, aktualizujte metadata položky PackageReference v souboru projektu.
<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>
Pokud se na balíček odkazuje tranzitivně prostřednictvím Microsoft.EntityFrameworkCore.Tools, budete muset do balíčku přidat explicitní PackageReference a změnit jeho metadata.
Seznam služeb
Následuje seznam služeb v době návrhu.
| Service | Description |
|---|---|
| IAnnotationCodeGenerator | Vygeneruje kód pro odpovídající poznámky modelu. |
| ICSharpHelper | Pomáhá generovat kód jazyka C#. |
| IPluralizer | Mění slova na množné nebo jednotné číslo. |
| ICSharpMigrationOperationGenerator | Vygeneruje kód jazyka C# pro operace migrace. |
| ICSharpSnapshotGenerator | Vygeneruje kód jazyka C# pro snímky modelu. |
| IMigrationsCodeGenerator | Generuje kód pro migraci. |
| IMigrationsCodeGeneratorSelector | Vybere vhodný generátor kódu migrace. |
| IMigrationsScaffolder | Hlavní třída pro správu migrace souborů. |
| ICompiledModelCodeGenerator | Generuje kód pro zkompilovaná metadata modelu. |
| ICompiledModelCodeGeneratorSelector | Vybere příslušný generátor kódu zkompilovaného modelu. |
| ICompiledModelScaffolder | Hlavní třída pro vytváření struktury kompilovaných modelů. |
| IDatabaseModelFactory | Vytvoří databázový model z databáze. |
| IModelCodeGenerator | Vygeneruje kód pro model. |
| IModelCodeGeneratorSelector | Vybere příslušný generátor kódu modelu. |
| IProviderConfigurationCodeGenerator | Generuje kód OnConfiguring. |
| IReverseEngineerScaffolder | Hlavní třída pro scaffolding modelů vytvořených zpětným inženýrstvím. |
| IScaffoldingModelFactory | Vytvoří model z databázového modelu. |
| IPrecompiledQueryCodeGenerator | Generuje kód pro předkompilované dotazy. |
| IPrecompiledQueryCodeGeneratorSelector | Vybere příslušný předkompilovaný generátor kódu dotazu. |
Používání služeb
Tyto služby můžou být užitečné také při vytváření vlastních nástrojů. Pokud například chcete automatizovat část pracovního postupu návrhu.
Pomocí rozšiřujících metod AddEntityFrameworkDesignTimeServices a AddDbContextDesignTimeServices můžete vytvořit zprostředkovatele služeb obsahující tyto služby.
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);