.NET Aspire Oracle Entity Framework 组件

本文介绍如何使用 .NET AspireOracleEntity Framework Core 集成。 Aspire.Oracle.EntityFrameworkCore 库用于在 DI 容器中将 System.Data.Entity.DbContext 注册为单例,以便连接 Oracle 数据库。 它还支持连接池、重试连接、运行状况检查、日志和遥测。

入门

需要 Oracle 数据库和连接字符串才能访问数据库。 若要开始 .NET AspireOracleEntity Framework Core 集成,请在消费 client 项目中安装 📦Aspire.Oracle.EntityFrameworkCore NuGet 包。

dotnet add package Aspire.Oracle.EntityFrameworkCore

有关详细信息,请参阅 dotnet add package在 .NET 应用程序中管理包依赖项

示例用法

在 client消耗项目的 Program.cs 文件中,调用 AddOracleDatabaseDbContext 扩展以注册 System.Data.Entity.DbContext,以便通过依赖项注入容器使用。

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

然后,可以使用依赖项注入检索 DbContext 实例。 例如,若要从服务中检索 client,

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

可能还需要配置 Oracle 数据库的特定选项,或者以其他方式注册 DbContext。 在本例中,调用 EnrichOracleDatabaseDbContext 扩展方法,例如:

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

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

builder.EnrichOracleDatabaseDbContext<MyDbContext>();

应用主机使用情况

若要在应用主机中为 Oracleserver 资源建模,请在 应用主机 项目中安装 📦Aspire.Hosting.Oracle NuGet 包。

dotnet add package Aspire.Hosting.Oracle

在应用主机项目中,注册 Oracle 容器并使用以下方法使用连接:

var builder = DistributedApplication.CreateBuilder(args);

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

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

如果要显式提供密码,可以将其作为参数提供。 请考虑以下替代示例:

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);

有关详细信息,请参阅 外部参数

配置

.NET Aspire Oracle Entity Framework Core 集成提供了多个选项,用于根据项目的要求和约定配置数据库连接。

使用连接字符串

使用 ConnectionStrings 配置部分中的连接字符串时,可以在调用 builder.AddOracleDatabaseDbContext<TContext>()时提供连接字符串的名称:

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

然后,将从 ConnectionStrings 配置部分检索连接字符串:

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

EnrichOracleDatabaseDbContext 不会使用 ConnectionStrings 配置部分,因为它希望在调用时已经注册了 DbContext

有关详细信息,请参阅 ODP.NET 文档

使用配置提供程序

.NET Aspire Oracle Entity Framework Core 集成支持 Microsoft.Extensions.Configuration。 它使用 Aspire:Oracle:EntityFrameworkCore 键从配置加载 OracleEntityFrameworkCoreSettings

以下示例展示了如何通过一个 appsettings.json 配置一些可用选项:

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

提示

Timeout 属性的值单位为秒。 如前面的示例所示设置时,超时时间为 30 秒。

使用内联委托

您还可以传递 Action<OracleEntityFrameworkCoreSettings> configureSettings 委托,以直接在代码中设置部分或全部选项,例如:禁用健康检查。

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

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

健康检查

默认情况下,.NET.NET Aspire 集成为所有服务启用 运行状况检查。 有关详细信息,请参阅 .NET.NET Aspire 集成概述

.NET Aspire Oracle Entity Framework Core 集成注册一个基本运行状况检查,用于检查给定 TContext的数据库连接。 默认情况下启用运行状况检查,可以使用配置中的 DisableHealthChecks 属性禁用。

可观测性和遥测

.NET .NET Aspire 集成会自动设置日志、追踪和指标配置,这些有时被称为 可观测性的支柱。 有关集成可观测性和遥测的详细信息,请参阅 .NET.NET Aspire 集成概述。 根据支持服务,某些集成可能仅支持其中一些功能。 例如,某些集成支持日志记录和跟踪,但不支持指标。 也可以使用 配置 部分中介绍的技术禁用遥测功能。

伐木

.NET Aspire Oracle Entity Framework Core 集成使用以下日志类别:

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

描图

.NET Aspire Oracle Entity Framework Core 集成将使用 OpenTelemetry发出以下跟踪活动:

  • OpenTelemetry。Instrumentation.EntityFrameworkCore

指标

.NET Aspire Oracle Entity Framework Core 集成目前支持以下指标:

  • Microsoft.EntityFrameworkCore

另请参阅