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