Usługi w czasie projektowania

Niektóre usługi używane przez narzędzia są używane tylko w czasie projektowania. Te usługi są zarządzane oddzielnie od usług środowiska uruchomieniowego platformy EF Core, aby zapobiec ich wdrażaniu z aplikacją. Aby zastąpić jedną z tych usług (na przykład usługi do generowania plików migracji), dodaj implementację IDesignTimeServices do projektu startowego.

internal class MyDesignTimeServices : IDesignTimeServices
{
    public void ConfigureDesignTimeServices(IServiceCollection services)
        => services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}

Odwoływanie się do Microsoft.EntityFrameworkCore.Design

Microsoft.EntityFrameworkCore.Design to pakiet DevelopmentDependency. Oznacza to, że zależność nie będzie przepływać przechodnio do innych projektów i że nie można domyślnie odwoływać się do jej typów.

Aby odwołać się do swoich typów i zastąpić usługi w czasie projektowania, zaktualizuj metadane elementu PackageReference w pliku 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>

Jeśli pakiet jest przywoływany przechodnio za pośrednictwem narzędzia Microsoft.EntityFrameworkCore.Tools, należy dodać jawny element PackageReference do pakietu i zmienić jego metadane.

Lista usług

Poniżej znajduje się lista usług w czasie projektowania.

Usługa opis
IAnnotationCodeGenerator Generuje kod odpowiadających adnotacji modelu.
ICSharpHelper Pomaga w generowaniu kodu w języku C#.
IPluralizer Pluralizes i sygnalizuje wyrazy.
IMigrationsCodeGenerator Generuje kod migracji.
IMigrationsScaffolder Klasa główna do zarządzania plikami migracji.
IDatabaseModelFactory Tworzy model bazy danych na podstawie bazy danych.
IModelCodeGenerator Generuje kod dla modelu.
IProviderConfigurationCodeGenerator Generuje kod OnConfiguring.
IReverseEngineerScaffolder Klasa główna do tworzenia szkieletów modeli z inżynierią odwrotną.
IScaffoldingModelFactory Tworzy model na podstawie modelu bazy danych.

Korzystanie z usług

Te usługi mogą być również przydatne do tworzenia własnych narzędzi. Jeśli na przykład chcesz zautomatyzować część przepływu pracy w czasie projektowania.

Możesz utworzyć dostawcę usług zawierającego te usługi przy użyciu metod rozszerzeń AddEntityFrameworkDesignTimeServices i 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);