Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Oracle Database är ett allmänt använt relationsdatabashanteringssystem som ägs och utvecklas av Oracle. Med integreringen AspireOracleEntity Framework Core kan du ansluta till befintliga Oracle servrar eller skapa nya servrar från .NET med container-registry.oracle.com/database/free containeravbildningen.
Värdintegrering
Aspire Oracle integreringen modellerar servern som typ OracleDatabaseServerResource och databasen som typ OracleDatabaseResource. Om du vill komma åt dessa typer och API:er lägger du till 📦Aspire. Gästfrihet.Oracle NuGet-paket i AppHost-projektet .
dotnet add package Aspire.Hosting.Oracle
Mer information finns i dotnet add package eller Hantera paketberoenden i .NET-applikationer.
Lägga till Oracle server- och databasresurser
I Ditt AppHost-projekt anropar du AddOracle för att lägga till och returnera en Oracle serverresursbyggare. Länka ett anrop till den returnerade resursbyggaren till AddDatabaseför att lägga till en Oracle databas till serverresursen.
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...
Anmärkning
Det kan ta lång tid att starta den Oracle databascontainern, så det är bäst att använda en beständig livslängd för att undvika onödiga omstarter. För mer information, se containerresursens livslängd.
När Aspire lägger till en containeravbildning i AppHost, som visas i föregående exempel med container-registry.oracle.com/database/free-avbildningen, skapar det en ny Oracle-server på din lokala dator. En referens till din Oracle resursbyggare (variabeln oracle) används för att lägga till en databas. Databasen heter oracledb och läggs sedan till i ExampleProject. Den Oracle resursen innehåller en slumpmässig password som genereras med hjälp av metoden CreateDefaultPasswordParameter.
Metoden WithReference konfigurerar en anslutning i ExampleProject med namnet "oracledb". Mer information finns i Livscykel för containerresurser.
Tips
Om du hellre vill ansluta till en befintlig Oracle server anropar du AddConnectionString i stället. Mer information finns i Referera till befintliga resurser.
Lägga till Oracle resurs med lösenordsparameter
Den Oracle resursen innehåller standardautentiseringsuppgifter med ett slumpmässigt lösenord. 
              Oracle stöder konfigurationsbaserade standardlösenord med hjälp av miljövariabeln ORACLE_PWD. När du uttryckligen vill ange ett lösenord kan du ange det som en parameter:
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);
Föregående kod hämtar en parameter som skickas till AddOracle-API:et och tilldelar parametern internt till ORACLE_PWD miljövariabeln för Oracle-containern. Parametern password anges vanligtvis som en användarhemlighet:
{
  "Parameters": {
    "password": "Non-default-P@ssw0rd"
  }
}
Mer information finns i externa parametrar.
Lägga till Oracle resurs med datavolym
Om du vill lägga till en datavolym i den Oracle resursen anropar du metoden 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...
Datavolymen används för att bevara Oracle data utanför containerns livscykel. Datavolymen monteras på sökvägen /opt/oracle/oradata i containern Oracle och när en name parameter inte anges genereras namnet slumpmässigt. Mer information om datavolymer och varför de föredras framför bindningsmonteringarfinns i dokumentationen Docker: Volymer.
Varning
Lösenordet lagras i datavolymen. När du använder en datavolym och om lösenordet ändras fungerar det inte förrän du tar bort volymen.
Lägg till Oracle resurs med databindningsmontering
Om du vill lägga till en databindningsmontering till den Oracle resursen anropar du metoden 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...
Viktig
Data bindningsmonteringar har begränsade funktioner jämfört med volymer, vilket ger bättre prestanda, portabilitet och säkerhet, vilket gör dem mer lämpliga för produktionsmiljöer. Bindningsmonteringar tillåter dock direkt åtkomst och ändring av filer i värdsystemet, perfekt för utveckling och testning där realtidsändringar behövs.
Databindningar förlitar sig på värddatorns filsystem för att bevara Oracle-datan mellan omstarter av containrar. Databindningsfästet monteras på C:\Oracle\Data-sökvägen i Windows (eller /Oracle/Data på Unix) på värddatorn i Oracle-containern. Mer information om databindningsmonteringar finns i Docker dokument: Bind monteringar.
Utför hälsokontroller för integrationshosting
Oracle värdintegrering lägger automatiskt till en hälsokontroll för den Oracle resursen. Hälsokontrollen verifierar att Oracle-servern körs och att en anslutning kan upprättas till den.
Värdintegrering förlitar sig på 📦 AspNetCore.HealthChecks.Oracle NuGet-paket.
Client integrering
Du behöver en Oracle databas och anslutningssträng för åtkomst till databasen. Kom igång med AspireOracle-klientintegrering genom att installera 📦Aspire.Oracle. EntityFrameworkCore NuGet-paket i det klientkrävande projektet, dvs. projektet för det program som använder Oracle-klienten. Oracle-klientintegrering registrerar en DbContext instans som du kan använda för att interagera med Oracle.
dotnet add package Aspire.Oracle.EntityFrameworkCore
Lägg till Oracle klient
I den Program.cs filen för ditt klientkrävande projekt anropar du AddOracleDatabaseDbContext-tilläggsmetoden på alla IHostApplicationBuilder för att registrera en DbContext för användning via containern för beroendeinmatning. Metoden tar en parameter för anslutningsnamn.
builder.AddOracleDatabaseDbContext<ExampleDbContext>(connectionName: "oracledb");
Tips
Parametern connectionName måste matcha namnet som används när du lägger till databasresursen Oracle i AppHost-projektet. Med andra ord, när du anropar AddDatabase och anger ett namn på oracledb ska samma namn användas när du anropar AddOracleDatabaseDbContext. Mer information finns i Lägg till Oracle server- och databasresurser.
Du kan sedan hämta DbContext-instansen med hjälp av dependency injection. Om du till exempel vill hämta anslutningen från en exempeltjänst:
public class ExampleService(ExampleDbContext context)
{
    // Use database context...
}
Mer information om beroendeinmatning finns i .NET beroendeinmatning.
Berika Oracle databaskontext
Du kanske föredrar att använda entitetsramverkets standardmetod för att hämta en databaskontext och lägga till den i containern för beroendeinmatning:
builder.Services.AddDbContext<ExampleDbContext>(options =>
    options.UseOracle(builder.Configuration.GetConnectionString("oracledb")
        ?? throw new InvalidOperationException("Connection string 'oracledb' not found.")));
Anmärkning
Namnet på anslutningssträngen GetConnectionString som du skickar till metoden måste matcha namnet som användes när du lägger till resursen Oracle i AppHost-projektet. Mer information finns i Lägg till Oracle server- och databasresurser.
Du har större flexibilitet när du skapar databaskontexten på det här sättet, till exempel:
- Du kan återanvända befintlig konfigurationskod för databaskontexten utan att skriva om den för Aspire.
- Du kan använda Entity Framework Core interceptorer för att ändra databasåtgärder.
- Du kan välja att inte använda Entity Framework Core kontextpooler, vilket kan fungera bättre under vissa omständigheter.
Om du använder den här metoden kan du förbättra databaskontexten med Aspire-style-återförsök, hälsokontroller, loggning och telemetrifunktioner genom att anropa EnrichOracleDatabaseDbContext metoden:
builder.EnrichOracleDatabaseDbContext<ExampleDbContext>(
    configureSettings: settings =>
    {
        settings.DisableRetry = false;
        settings.CommandTimeout = 30 // seconds
    });
Parametern settings är en instans av klassen OracleEntityFrameworkCoreSettings.
Konfiguration
Den AspireOracleEntity Framework Core integreringen innehåller flera konfigurationsmetoder och alternativ för att uppfylla kraven och konventionerna i ditt projekt.
Använda en anslutningssträng
När du använder en anslutningssträng från ConnectionStrings konfigurationsavsnittet anger du namnet på anslutningssträngen när du anropar builder.AddOracleDatabaseDbContext<TContext>():
builder.AddOracleDatabaseDbContext<ExampleDbContext>("oracleConnection");
Anslutningssträngen hämtas från avsnittet ConnectionStrings konfiguration:
{
  "ConnectionStrings": {
    "oracleConnection": "Data Source=TORCL;User Id=OracleUser;Password=Non-default-P@ssw0rd;"
  }
}
              EnrichOracleDatabaseDbContext använder inte ConnectionStrings-konfigurationsavsnittet eftersom det förväntar sig att en DbContext registreras vid den tidpunkt då den anropas.
Mer information finns i ODP.NET-dokumentationen.
Använda konfigurationsprovidrar
              Aspire
              Oracle
              Entity Framework Core-integreringen stöder Microsoft.Extensions.Configuration från konfigurationsfiler som appsettings.json med hjälp av Aspire:Oracle:EntityFrameworkCore-nyckeln. Om du har konfigurerat konfigurationerna i avsnittet Aspire:Oracle:EntityFrameworkCore kan du bara anropa metoden utan att skicka någon parameter.
Följande är ett exempel på en appsettings.json som konfigurerar några av de tillgängliga alternativen:
{
  "Aspire": {
    "Oracle": {
      "EntityFrameworkCore": {
        "DisableHealthChecks": true,
        "DisableTracing": true,
        "DisableRetry": false,
        "CommandTimeout": 30
      }
    }
  }
}
Tips
Egenskapen CommandTimeout är i sekunder. När den anges som i föregående exempel är tidsgränsen 30 sekunder.
Använda inline-delegater
Du kan också skicka delegaten Action<OracleEntityFrameworkCoreSettings> för att ställa in vissa eller alla alternativ direkt i koden, till exempel för att inaktivera hälsokontroller från kod.
builder.AddOracleDatabaseDbContext<ExampleDbContext>(
    "oracle",
    static settings => settings.DisableHealthChecks  = true);
eller
builder.EnrichOracleDatabaseDbContext<ExampleDbContext>(
    static settings => settings.DisableHealthChecks  = true);
Konfigurationsalternativ
Här är de konfigurerbara alternativen med motsvarande standardvärden:
| Namn | Beskrivning | 
|---|---|
| ConnectionString | Anslutningssträngen för Oracle-databasen som man ansluter till. | 
| DisableHealthChecks | Ett booleskt värde som anger om databasens hälsokontroll är inaktiverad eller inte. | 
| DisableTracing | Ett booleskt värde som anger om OpenTelemetry spårning är inaktiverad eller inte. | 
| DisableRetry | Ett booleskt värde som anger om återförsök av kommandon ska inaktiveras eller inte. | 
| CommandTimeout | Tiden i sekunder som man väntar för att kommandot ska köras. | 
Client hälsokontroller för integrering
Som standard Aspire har klientintegreringarhälsokontroller aktiverade för alla tjänster. På samma sätt möjliggör många Aspirehostingintegrationer även hälsokontrolländpunkter. Mer information finns i:
Som standard hanterar AspireOracleEntity Framework Core-integreringen följande:
- Kontrollerar om OracleEntityFrameworkCoreSettings.DisableHealthChecks är true.
- I så fall läggs DbContextHealthChecktill, som anropar EF Core:s CanConnectAsync-metod. Namnet på hälsokontrollen är samma som namnet på typenTContext.
Observerbarhet och telemetri
Aspire integreringar konfigurerar automatiskt konfigurationer för loggning, spårning och mått, som ibland kallas grundpelarna för observerbarhet. Mer information om integreringsobservabilitet och telemetri finns i Aspire översikten över integreringar. Beroende på säkerhetskopieringstjänsten kanske vissa integreringar bara stöder vissa av dessa funktioner. Vissa integreringar stöder till exempel loggning och spårning, men inte mått. Telemetrifunktioner kan också inaktiveras med hjälp av de tekniker som visas i avsnittet Configuration.
Skogsavverkning
Aspire Oracle Entity Framework Core-integreringen använder följande loggkategorier:
- 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
Spårning
Integreringen AspireOracleEntity Framework Core genererar följande spårningsaktiviteter med hjälp av OpenTelemetry:
- OpenTelemetry. Instrumentation.EntityFrameworkCore
Mätvärden
Den AspireOracleEntity Framework Core integreringen stöder för närvarande följande mått:
- Microsoft.EntityFrameworkCore