Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az eszközök által használt egyes szolgáltatásokat csak a tervezéskor használják. Ezeket a szolgáltatásokat az EF Core futtatókörnyezeti szolgáltatásaitól elkülönítve felügyeljük, hogy ne legyenek üzembe helyezve az alkalmazással. Ezen szolgáltatások, például a migrációs fájlok létrehozására szolgáló szolgáltatás felülbírálásához adjon hozzá egy IDesignTimeServices implementációt az indítási projekthez.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Hivatkozás Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Design egy DevelopmentDependency csomag. Ez azt jelenti, hogy a függőség nem halad át tranzitív módon más projektekbe, és alapértelmezés szerint nem hivatkozhat a típusára.
A típusokra való hivatkozáshoz és a tervezési időalapú szolgáltatások felülbírálásához frissítse a PackageReference elem metaadatait a projektfájlban.
<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>
Ha a csomagra tranzitív módon hivatkozik a Microsoft.EntityFrameworkCore.Tools segítségével, explicit PackageReference-t kell hozzáadnia a csomaghoz, és módosítania kell a metaadatait.
Szolgáltatások listája
Az alábbiakban a tervezési idejű szolgáltatások listája található.
| Service | Description |
|---|---|
| IAnnotationCodeGenerator | Létrehozza a megfelelő modelljegyzetek kódját. |
| ICSharpHelper | Segít a C#-kód generálásában. |
| IPluralizer | Pluralizálja és szingularizálja a szavakat. |
| ICSharpMigrationOperationGenerator | C#-kódot hoz létre a migrálási műveletekhez. |
| ICSharpSnapshotGenerator | C#-kódot hoz létre a modell pillanatképeihez. |
| IMigrationsCodeGenerator | Kódot hoz létre egy migráláshoz. |
| IMigrationsCodeGeneratorSelector | Kiválasztja a megfelelő migrálási kódgenerátort. |
| IMigrationsScaffolder | A migrálási fájlok kezelésének fő osztálya. |
| ICompiledModelCodeGenerator | A lefordított modell metaadatainak kódját hozza létre. |
| ICompiledModelCodeGeneratorSelector | Kiválasztja a megfelelő lefordított modellkódgenerátort. |
| ICompiledModelScaffolder | Az állványzatok lefordított modelljeinek fő osztálya. |
| IDatabaseModelFactory | Adatbázismodellt hoz létre egy adatbázisból. |
| IModelCodeGenerator | Egy modell kódját hozza létre. |
| IModelCodeGeneratorSelector | Kiválasztja a megfelelő modellkódgenerátort. |
| IProviderConfigurationCodeGenerator | OnConfiguring-kódot hoz létre. |
| IReverseEngineerScaffolder | A fordítottan megtervezett modellek állványzatának fő osztálya. |
| IScaffoldingModelFactory | Létrehoz egy modellt egy adatbázismodellből. |
| IPrecompiledQueryCodeGenerator | Kód generálása előre összeállított lekérdezésekhez. |
| IPrecompiledQueryCodeGeneratorSelector | Kiválasztja a megfelelő előre összeállított lekérdezéskód-generátort. |
Szolgáltatások használata
Ezek a szolgáltatások saját eszközök létrehozásához is hasznosak lehetnek. Ha például a tervezési idejű munkafolyamat egy részét szeretné automatizálni.
Ezeket a szolgáltatásokat tartalmazó szolgáltatót az AddEntityFrameworkDesignTimeServices és az AddDbContextDesignTimeServices bővítménymetszetekkel hozhatja létre.
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);