Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 typu 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="9.0.0">
<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 | Description |
|---|---|
| IAnnotationCodeGenerator | Generuje kod dla adnotacji związanych z modelem. |
| ICSharpHelper | Pomaga w generowaniu kodu w języku C#. |
| IPluralizer | Pluralizuje i używa form liczby pojedynczej dla wyrazów. |
| ICSharpMigrationOperationGenerator | Generuje kod języka C# na potrzeby operacji migracji. |
| ICSharpSnapshotGenerator | Generuje kod języka C# dla migawek modelu. |
| IMigrationsCodeGenerator | Generuje kod migracji. |
| IMigrationsCodeGeneratorSelector | Wybiera odpowiedni generator kodu migracji. |
| IMigrationsScaffolder | Klasa główna do zarządzania plikami migracji. |
| ICompiledModelCodeGenerator | Generuje kod dla skompilowanych metadanych modelu. |
| ICompiledModelCodeGeneratorSelector | Wybiera odpowiedni skompilowany generator kodu modelu. |
| ICompiledModelScaffolder | Główna klasa do tworzenia struktur dla skompilowanych modeli. |
| IDatabaseModelFactory | Tworzy model bazy danych na podstawie bazy danych. |
| IModelCodeGenerator | Generuje kod dla modelu. |
| IModelCodeGeneratorSelector | Wybiera odpowiedni generator kodu 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. |
| IPrecompiledQueryCodeGenerator | Generuje kod dla wstępnie skompilowanych zapytań. |
| IPrecompiledQueryCodeGeneratorSelector | Wybiera odpowiedni wstępnie skompilowany generator kodu zapytania. |
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.
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);