Služby v době návrhu

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 projektu po spuštění 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="3.1.9">
  <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.

Služba Popis
IAnnotationCodeGenerator Vygeneruje kód pro odpovídající poznámky modelu.
ICSharpHelper Pomáhá generovat kód jazyka C#.
IPluralizer V množném čísle se slova vyčíslí a singalizuje.
IMigrationsCodeGenerator Generuje kód pro migraci.
IMigrationsScaffolder Hlavní třída pro správu souborů migrace.
IDatabaseModelFactory Vytvoří databázový model z databáze.
IModelCodeGenerator Vygeneruje kód pro model.
IProviderConfigurationCodeGenerator Generuje kód OnConfiguring.
IReverseEngineerScaffolder Hlavní třída pro generování zpětnou analýzu modelů.
IScaffoldingModelFactory Vytvoří model z databázového modelu.

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.

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);