.NET Aspire Oracle Entity Framework Component

In this article, you learn how to use the The .NET Aspire Oracle Entity Framework Core integration. The Aspire.Oracle.EntityFrameworkCore library is used to register a System.Data.Entity.DbContext as a singleton in the DI container for connecting to Oracle databases. It also enables connection pooling, retries, health checks, logging and telemetry.

Get started

You need an Oracle database and connection string for accessing the database. To get started with the The .NET Aspire Oracle Entity Framework Core integration, install the Aspire.Oracle.EntityFrameworkCore NuGet package in the consuming client project.

dotnet add package Aspire.Oracle.EntityFrameworkCore

For more information, see dotnet add package or Manage package dependencies in .NET applications.

Example usage

In the Program.cs file of your client-consuming project, call the AddOracleDatabaseDbContext extension to register a System.Data.Entity.DbContext for use via the dependency injection container.

builder.AddOracleDatabaseDbContext<MyDbContext>("oracledb");

You can then retrieve the DbContext instance using dependency injection. For example, to retrieve the client from a service:

public class ExampleService(MyDbContext context)
{
    // Use context...
}

You might also need to configure specific options of Oracle database, or register a DbContext in other ways. In this case call the EnrichOracleDatabaseDbContext extension method, for example:

var connectionString = builder.Configuration.GetConnectionString("oracledb");

builder.Services.AddDbContextPool<MyDbContext>(
    dbContextOptionsBuilder => dbContextOptionsBuilder.UseOracle(connectionString));

builder.EnrichOracleDatabaseDbContext<MyDbContext>();

App host usage

To model the Oracle server resource in the app host, install the Aspire.Hosting.Oracle NuGet package in the app host project.

dotnet add package Aspire.Hosting.Oracle

In your app host project, register an Oracle container and consume the connection using the following methods:

var builder = DistributedApplication.CreateBuilder(args);

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

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

When you want to explicitly provide a password, you can provide it as a parameter. Consider the following alternative example:

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

var oracle = builder.AddOracle("oracle", password);
var oracledb = oracle.AddDatabase("oracledb");

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

For more information, see External parameters.

Configuration

The .NET Aspire Oracle Entity Framework Core integration provides multiple options to configure the database connection based on the requirements and conventions of your project.

Use a connection string

When using a connection string from the ConnectionStrings configuration section, you can provide the name of the connection string when calling builder.AddOracleDatabaseDbContext<TContext>():

builder.AddOracleDatabaseDbContext<MyDbContext>("myConnection");

And then the connection string will be retrieved from the ConnectionStrings configuration section:

{
  "ConnectionStrings": {
    "myConnection": "Data Source=TORCL;User Id=myUsername;Password=myPassword;"
  }
}

The EnrichOracleDatabaseDbContext won't make use of the ConnectionStrings configuration section since it expects a DbContext to be registered at the point it is called.

For more information, see the ODP.NET documentation.

Use configuration providers

The .NET Aspire Oracle Entity Framework Core integration supports Microsoft.Extensions.Configuration. It loads the OracleEntityFrameworkCoreSettings from configuration by using the Aspire:Oracle:EntityFrameworkCore key.

The following example shows an appsettings.json that configures some of the available options:

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

Tip

The Timeout property is in seconds. When set as shown in the preceding example, the timeout is 30 seconds.

Use inline delegates

You can also pass the Action<OracleEntityFrameworkCoreSettings> configureSettings delegate to set up some or all the options inline, for example to disable health checks from code:

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

or

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

Health checks

By default, .NET Aspire integrations enable health checks for all services. For more information, see .NET Aspire integrations overview.

The The .NET Aspire Oracle Entity Framework Core integration registers a basic health check that checks the database connection given a TContext. The health check is enabled by default and can be disabled using the DisableHealthChecks property in the configuration.

Observability and telemetry

.NET Aspire integrations automatically set up Logging, Tracing, and Metrics configurations, which are sometimes known as the pillars of observability. For more information about integration observability and telemetry, see .NET Aspire integrations overview. Depending on the backing service, some integrations may only support some of these features. For example, some integrations support logging and tracing, but not metrics. Telemetry features can also be disabled using the techniques presented in the Configuration section.

Logging

The The .NET Aspire Oracle Entity Framework Core integration uses the following log categories:

  • Microsoft.EntityFrameworkCore.Database.Command.CommandCreated
  • Microsoft.EntityFrameworkCore.Database.Command.CommandExecuting
  • Microsoft.EntityFrameworkCore.Database.Command.CommandExecuted
  • Microsoft.EntityFrameworkCore.Database.Command.CommandError

Tracing

The The .NET Aspire Oracle Entity Framework Core integration will emit the following tracing activities using OpenTelemetry:

  • OpenTelemetry.Instrumentation.EntityFrameworkCore

Metrics

The The .NET Aspire Oracle Entity Framework Core integration currently supports the following metrics:

  • Microsoft.EntityFrameworkCore

See also