Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Vissa tjänster som används av verktygen används endast vid designtillfället. Dessa tjänster hanteras separat från EF Cores körningstjänster för att förhindra att de distribueras med din app. Om du vill åsidosätta en av dessa tjänster (till exempel tjänsten för att generera migreringsfiler) lägger du till en implementering av IDesignTimeServices i startprojektet.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Referera till Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Design är ett DevelopmentDependency-paket. Det innebär att beroendet inte flödar transitivt till andra projekt och att du som standard inte kan referera till dess typer.
För att referera till dess typer och åsidosätta designtidstjänster uppdaterar du PackageReference-objektets metadata i projektfilen.
<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>
Om paketet refereras transitivt via Microsoft.EntityFrameworkCore.Tools måste du lägga till en explicit PackageReference i paketet och ändra dess metadata.
Lista över tjänster
Följande är en lista över designtidstjänster.
| Tjänster | Description |
|---|---|
| IAnnotationCodeGenerator | Genererar koden för motsvarande modellanteckningar. |
| ICSharpHelper | Hjälper till med att generera C#-kod. |
| IPluralizer | Pluraliserar och singulariserar ord. |
| ICSharpMigrationOperationGenerator | Genererar C#-kod för migreringsåtgärder. |
| ICSharpSnapshotGenerator | Genererar C#-kod för modellögonblicksbilder. |
| IMigrationsCodeGenerator | Genererar kod för en migrering. |
| IMigrationsCodeGeneratorSelector | Väljer lämplig kodgenerator för migrering. |
| IMigrationsScaffolder | Huvudklassen för hantering av migreringsfiler. |
| ICompiledModelCodeGenerator | Genererar kod för kompilerade modellmetadata. |
| ICompiledModelCodeGeneratorSelector | Väljer lämplig kompilerad modellkodgenerator. |
| ICompiledModelScaffolder | Huvudklassen för att strukturera kompilerade modeller. |
| IDatabaseModelFactory | Skapar en databasmodell från en databas. |
| IModelCodeGenerator | Genererar kod för en modell. |
| IModelCodeGeneratorSelector | Väljer lämplig modellkodgenerator. |
| IProviderConfigurationCodeGenerator | Genererar OnConfiguring-kod. |
| IReverseEngineerScaffolder | Huvudklassen för att bygga strukturer för reverse engineering-modeller. |
| IScaffoldingModelFactory | Skapar en modell från en databasmodell. |
| IPrecompiledQueryCodeGenerator | Genererar kod för förkompilerade frågor. |
| IPrecompiledQueryCodeGeneratorSelector | Väljer lämplig fördefinierad frågekodgenerator. |
Använda tjänster
Dessa tjänster kan också vara användbara för att skapa egna verktyg. När du till exempel vill automatisera en del av ditt arbetsflöde för designtid.
Du kan skapa en tjänstleverantör som innehåller dessa tjänster med hjälp av tilläggsmetoderna AddEntityFrameworkDesignTimeServices och 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);