Sdílet prostřednictvím


integrace .NET AspireOracleEntity Framework Core

zahrnuje:integraci hostování a integraci Client

Oracle Database je široce používaný systém pro správu relačních databází, který vlastní a vyvíjí Oracle. Integrace .NET AspireOracleEntity Framework Core umožňuje připojit se k existujícím serverům Oracle nebo vytvořit nové servery z .NET s imagí kontejneru container-registry.orcale.com/databse/free.

Integrace hostování

.NET Aspire Oracle integrace hostování modeluje server jako typ OracleDatabaseServerResource a databázi jako typ OracleDatabaseResource. Pokud chcete získat přístup k těmto typům a rozhraním API, přidejte balíček NuGet 📦Aspire.Hosting.Oracle do projektu hostitele aplikace .

dotnet add package Aspire.Hosting.Oracle

Další informace najdete v tématu dotnet add package nebo Správa závislostí balíčků v aplikacích .NET.

Přidání Oracle serverových a databázových prostředků

V projektu hostitele aplikace zavolejte AddOracle a přidejte a vraťte tvůrce prostředků serveru Oracle. Zřetězte volání na tvůrce prostředků vráceného na AddDatabasea přidejte databázi Oracle do prostředku serveru:

var builder = DistributedApplication.CreateBuilder(args);

var oracle = builder.AddOracle("oracle")
                    .WithLifetime(ContainerLifetime.Persistent);

var oracledb = oracle.AddDatabase("oracledb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(oracledb);
       .WaitFor(oracledb);

// After adding all resources, run the app...

Poznámka

Kontejner databáze Oracle může být pomalý, takže je nejlepší použít trvalou dobu života, abyste se vyhnuli zbytečným restartováním. Další informace najdete v tématu Životnost prostředků kontejneru.

Když .NET.NET Aspire přidá do hostitele aplikace image kontejneru, jak je znázorněno v předchozím příkladu s imagí container-registry.oracle.com/database/free, vytvoří na místním počítači nový server Oracle. K přidání databáze se používá odkaz na tvůrce zdrojů Oracle (proměnná oracle). Databáze se jmenuje oracledb a pak se přidá do ExampleProject. Prostředek Oracle obsahuje náhodný password vygenerovaný pomocí metody CreateDefaultPasswordParameter.

Metoda WithReference nakonfiguruje připojení v ExampleProject s názvem "oracledb". Další informace naleznete v tématu životní cyklus pro zdroje kontejneru.

Rada

Pokud byste se raději připojili k existujícímu serveru Oracle, volejte místo toho AddConnectionString. Další informace naleznete v tématu Odkaz na existující prostředky.

Přidejte prostředek Oracle s parametrem hesla

Prostředek Oracle obsahuje výchozí přihlašovací údaje s náhodným heslem. Oracle podporuje výchozí hesla založená na konfiguraci pomocí environmentální proměnné ORACLE_PWD. Pokud chcete zadat heslo explicitně, můžete ho zadat jako parametr:

var password = builder.AddParameter("password", secret: true);

var oracle = builder.AddOracle("oracle", password)
                    .WithLifetime(ContainerLifetime.Persistent);

var oracledb = oracle.AddDatabase("oracledb");

var myService = builder.AddProject<Projects.ExampleProject>()
                       .WithReference(oracledb)
                       .WaitFor(oracledb);

Předchozí kód získá k předání do rozhraní AddOracle API parametr a ten následně interně přiřadí do proměnné prostředí ORACLE_PWD kontejneru Oracle. Parametr password je obvykle určen jako tajný kód uživatele:

{
  "Parameters": {
    "password": "Non-default-P@ssw0rd"
  }
}

Další informace naleznete v tématu Externí parametry.

Přidat prostředek Oracle s datovým objemem

Pokud chcete do prostředku Oracle přidat datový svazek, zavolejte metodu WithDataVolume:

var builder = DistributedApplication.CreateBuilder(args);

var oracle = builder.AddOracle("oracle")
                    .WithDataVolume()
                    .WithLifetime(ContainerLifetime.Persistent);

var oracledb = oracle.AddDatabase("oracle");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(oracledb)
       .WaitFor(oracledb);

// After adding all resources, run the app...

Objem dat se používá k zachování Oracle dat mimo životní cyklus kontejneru. Datový svazek se připojí k cestě /opt/oracle/oradata v kontejneru Oracle a když není zadaný parametr name, název se náhodně vygeneruje. Další informace o datových svazcích a podrobnosti o tom, proč se upřednostňují před připojení pomocí vazeb, najdete v dokumentaci Docker: Svazky.

Varování

Heslo je uloženo v datovém svazku. Při použití datového svazku, pokud se heslo změní, nebude fungovat, dokud svazek neodstraníte.

Přidání prostředku Oracle s připojením vazby dat

Chcete-li přidat vazbu datového úložiště k prostředku Oracle, zavolejte metodu WithDataBindMount:

var builder = DistributedApplication.CreateBuilder(args);

var oracle = builder.AddOracle("oracle")
                    .WithDataBindMount(source: @"C:\Oracle\Data");

var oracledb = oracle.AddDatabase("oracledb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(oracledb)
       .WaitFor(oracledb);

// After adding all resources, run the app...

Důležitý

Připojení vazby dat mají v porovnání s svazkyomezené funkce, které nabízejí lepší výkon, přenositelnost a zabezpečení, což je vhodnější pro produkční prostředí. Připojení pomocí vazeb však umožňují přímý přístup a úpravy souborů v hostitelském systému, což je ideální pro vývoj a testování, kde jsou potřebné změny v reálném čase.

Datové svazky typu bind využívají systém souborů hostitelského počítače k zachování Oracle dat při restartování kontejneru. Úložiště dat je připojeno na C:\Oracle\Data ve Windows (nebo na /Oracle/Data na Unix) v hostitelském systému v rámci kontejneru Oracle. Další informace o připojeních datových vazeb najdete v dokumentaci Docker: Připojení vazby.

Hostování kontrol stavu integrace

Integrace hostování Oracle automaticky přidá kontrolu stavu prostředku Oracle. Kontrola stavu ověřuje, jestli je server Oracle spuštěný a že se k němu dá navázat připojení.

Integrace hostování spoléhá na 📦 AspNetCore.HealthChecks.Oracle balíček NuGet.

integrace Client

Pro přístup k databázi potřebujete Oracle databázi a připojovací řetězec. Pokud chcete začít s integrací klienta .NET AspireOracle, nainstalujte 📦Aspire.Oracle. EntityFrameworkCore balíček NuGet v projektu využívajícím klienta, tj. projekt aplikace, která používá klienta Oracle. Integrace klienta Oracle registruje instanci DbContext, kterou můžete použít k interakci s Oracle.

dotnet add package Aspire.Oracle.EntityFrameworkCore

Přidejte klienta Oracle

V souboru Program.cs klientského projektu zavolejte metodu rozšíření AddOracleDatabaseDbContext na libovolném IHostApplicationBuilder a zaregistrujte DbContext pro použití prostřednictvím kontejneru injekce závislostí. Metoda přebírá parametr názvu připojení.

builder.AddOracleDatabaseDbContext<ExampleDbContext>(connectionName: "oracledb");

Rada

Parametr connectionName se musí shodovat s názvem použitým při přidávání prostředku databáze Oracle do hostitelského projektu aplikace. Jinými slovy, když voláte AddDatabase a zadáte jméno oracledb, ten samý název by měl být použit při volání AddOracleDatabaseDbContext. Další informace najdete v tématu Přidání Oracle serverových a databázových prostředků.

Potom můžete načíst instanci DbContext pomocí dependency injection. Pro načtení připojení z příkladové služby například:

public class ExampleService(ExampleDbContext context)
{
    // Use database context...
}

Další informace o injektáži závislostí najdete v tématu .NET injektáž závislostí.

Přidání kontextu databáze Oracle s obohacením

Pokud chcete rozšířit DbContext dalšími službami, jako jsou automatické opakování, kontroly stavu, protokolování a telemetrie, zavolejte metodu EnrichOracleDatabaseDbContext:

builder.EnrichOracleDatabaseDbContext<ExampleDbContext>(
    connectionName: "oracledb",
    configureSettings: settings =>
    {
        settings.DisableRetry = false;
        settings.CommandTimeout = 30 // seconds
    });

Parametr settings je instance třídy OracleEntityFrameworkCoreSettings.

Konfigurace

Integrace .NET AspireOracleEntity Framework Core poskytuje několik přístupů a možností konfigurace pro splnění požadavků a konvencí projektu.

Použijte připojovací řetězec

Při použití připojovacího řetězce z oddílu konfigurace ConnectionStrings zadáte název připojovacího řetězce při volání builder.AddOracleDatabaseDbContext<TContext>():

builder.AddOracleDatabaseDbContext<ExampleDbContext>("oracleConnection");

Připojovací řetězec se načte z konfiguračního oddílu ConnectionStrings.

{
  "ConnectionStrings": {
    "oracleConnection": "Data Source=TORCL;User Id=OracleUser;Password=Non-default-P@ssw0rd;"
  }
}

EnrichOracleDatabaseDbContext nevyužije konfigurační oddíl ConnectionStrings, protože očekává, že DbContext bude registrován v okamžiku, kdy se volá.

Další informace naleznete vODP dokumentaci .

Použití zprostředkovatelů konfigurace

Integrace .NET AspireOracleEntity Framework Core podporuje Microsoft.Extensions.Configuration z konfiguračních souborů, jako je appsettings.json pomocí klíče Aspire:Oracle:EntityFrameworkCore. Pokud jste nastavili konfigurace v oddílu Aspire:Oracle:EntityFrameworkCore, stačí volat metodu bez předání jakéhokoli parametru.

Následuje příklad appsettings.json, který konfiguruje některé z dostupných možností:

{
  "Aspire": {
    "Oracle": {
      "EntityFrameworkCore": {
        "DisableHealthChecks": true,
        "DisableTracing": true,
        "DisableRetry": false,
        "CommandTimeout": 30
      }
    }
  }
}

Rada

Vlastnost CommandTimeout je v sekundách. Pokud je nastavený jako v předchozím příkladu, časový limit je 30 sekund.

Používejte vložené delegáty

Můžete také předat delegáta Action<OracleEntityFrameworkCoreSettings> a nastavit některé nebo všechny možnosti přímo, například zakázat kontroly stavu přímo v kódu.

builder.AddOracleDatabaseDbContext<ExampleDbContext>(
    "oracle",
    static settings => settings.DisableHealthChecks  = true);

nebo

builder.EnrichOracleDatabaseDbContext<ExampleDbContext>(
    static settings => settings.DisableHealthChecks  = true);

Možnosti konfigurace

Tady jsou konfigurovatelné možnosti s odpovídajícími výchozími hodnotami:

Jméno Popis
ConnectionString Připojovací řetězec Oracle databáze, ke které se chcete připojit.
DisableHealthChecks Logická hodnota, která označuje, jestli je kontrola stavu databáze zakázaná nebo ne.
DisableTracing Logická hodnota označující, jestli je trasování OpenTelemetry zakázané nebo ne.
DisableRetry Logická hodnota, která označuje, jestli se mají opakování příkazů zakázat, nebo ne.
CommandTimeout Doba v sekundách čekání na spuštění příkazu.

Kontroly stavu

Ve výchozím nastavení integrace .NET.NET Aspire aktivují kontroly stavu pro všechny služby. Další informace naleznete v přehledu integrací .NET.NET Aspire.

Integrace .NET AspireOracleEntity Framework Core ve výchozím nastavení zpracovává následující:

Pozorovatelnost a telemetrie

.NET .NET Aspire integrace automaticky nastaví konfigurace pro protokolování, trasování a metriky, které se někdy označují jako pilíře pozorovatelnosti. Další informace o pozorovatelnosti a telemetrii integrace najdete v přehledu integrace .NET.NET Aspire. V závislosti na zálohovací službě můžou některé integrace podporovat pouze některé z těchto funkcí. Například některé integrace podporují protokolování a trasování, ale ne metriky. Funkce telemetrie je také možné zakázat pomocí technik uvedených v části Konfigurace.

Protokolování

Integrace .NET AspireOracleEntity Framework Core používá následující kategorie protokolů:

  • Microsoft.EntityFrameworkCore.ChangeTracking
  • Microsoft.EntityFrameworkCore.Database.Command
  • Microsoft.EntityFrameworkCore.Database.Connection
  • Microsoft.EntityFrameworkCore.Database.Transaction
  • Microsoft.EntityFrameworkCore.Infrastructure
  • Microsoft.EntityFrameworkCore.Migrations
  • Microsoft.EntityFrameworkCore.Model
  • Microsoft.EntityFrameworkCore.Model.Validation
  • Microsoft.EntityFrameworkCore.Query
  • Microsoft.EntityFrameworkCore.Update

Trasování

Integrace .NET AspireOracleEntity Framework Core pomocí OpenTelemetryvygeneruje následující aktivity trasování:

  • OpenTelemetry. Instrumentation.EntityFrameworkCore

Metriky

Integrace .NET AspireOracleEntity Framework Core aktuálně podporuje následující metriky:

  • Microsoft.EntityFrameworkCore

Viz také