事件
.NET Aspire Oracle Entity Framework Core 整合
Oracle 資料庫 是 Oracle所擁有和開發的廣泛使用關係資料庫管理系統。 .NET Aspire Oracle Entity Framework Core 整合可讓您連線到現有的 Oracle 伺服器,或從 .NET 使用 container-registry.oracle.com/database/free 容器映像建立新的伺服器。
裝載整合 .NET AspireOracle 會將伺服器模型化為 OracleDatabaseServerResource 類型,並將資料庫模型化為 OracleDatabaseResource 類型。 若要存取這些類型和 API,請在 📦 專案中新增 AspireOracle.Hosting. NuGet 套件。
dotnet add package Aspire.Hosting.Oracle
如需詳細資訊,請參閱 dotnet add package 或 管理 .NET 應用程式中的套件相依性。
在應用程式主專案中,呼叫 AddOracle 以新增並傳回 Oracle 伺服器資源產生器。 將傳回的資源產生器呼叫鏈結至 AddDatabase,以將 Oracle 資料庫新增至伺服器資源:
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...
注意
Oracle 資料庫容器啟動速度可能會變慢,因此最好使用 持續性 存留期,以避免不必要的重新啟動。 如需詳細資訊,請參閱 容器資源存留期。
當 .NET.NET Aspire 將容器映像新增至應用程式主機時,如上述範例中的 container-registry.oracle.com/database/free
映像所示,它會在本機計算機上建立新的 Oracle 伺服器。
Oracle 資源產生器(oracle
變數)的參考可用來新增資料庫。 資料庫名為 oracledb
,然後新增至 ExampleProject
。
Oracle 資源包含使用 password
方法產生的隨機 CreateDefaultPasswordParameter。
WithReference 方法會在名為 ExampleProject
的 "oracledb"
中設定連接。 如需詳細資訊,請參閱 容器資源生命週期。
提示
如果您想要連線到現有的 Oracle 伺服器,請改為呼叫 AddConnectionString。 如需詳細資訊,請參閱 參考現有資源。
Oracle 資源包含具有隨機密碼的預設認證。
Oracle 支援以組態為基礎的預設密碼,方法是使用環境變數 ORACLE_PWD
。 當您想要明確提供密碼時,您可以將它當做參數提供:
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);
上述程式代碼會取得要傳遞至 AddOracle
API 的參數,並在內部將 參數指派給 ORACLE_PWD
容器的 Oracle 環境變數。
password
參數通常指定為 用戶密碼:
{
"Parameters": {
"password": "Non-default-P@ssw0rd"
}
}
如需詳細資訊,請參閱 外部參數。
若要將數據磁碟區新增至 Oracle 資源,請呼叫 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...
數據磁碟區可用來將 Oracle 數據保存在其容器生命週期之外。 資料卷會掛載在 /opt/oracle/oradata
路徑的 Oracle 容器中,且在未提供 name
參數時,名稱會隨機產生。 如需有關資料量的詳細資訊,以及為何它們比 系結掛接更受偏好的原因,請參閱 Docker 檔:磁碟區。
警告
密碼會儲存在數據磁碟區中。 使用數據磁碟區時,如果密碼變更,在刪除磁碟區之前將無法運作。
若要將數據系結掛接新增至 Oracle 資源,請呼叫 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...
數據系結裝載依賴主計算機的檔案系統,在容器重新啟動時保存 Oracle 數據。 數據掛載會被掛接在主機上的 C:\Oracle\Data
路徑(或 /Oracle/Data
上的 Unix 路徑),位於 Oracle 容器中。 如需資料系結掛接的詳細資訊,請參閱 Docker 檔:系結掛接。
託管整合 Oracle 會自動新增對於 Oracle 資源的健康檢查。 健康檢查會驗證 Oracle 伺服器正在運行,並且能夠建立連線。
裝載整合依賴 📦 的 AspNetCore.HealthChecks 套件 和Oracle 的 NuGet 套件。
您需要 Oracle 資料庫和連接字串,才能存取資料庫。 若要開始使用 .NET AspireOracle 用戶端整合,請安裝 📦Aspire。Oracle。EntityFrameworkCore 用戶端取用專案中的 NuGet 套件,也就是使用 Oracle 用戶端的應用程式專案。 Oracle 用戶端整合會註冊可用來與 DbContext互動的 Oracle 實例。
dotnet add package Aspire.Oracle.EntityFrameworkCore
在用戶端取用專案的 Program.cs 檔案中,在任何 AddOracleDatabaseDbContext 上呼叫 IHostApplicationBuilder 擴充方法,以註冊 DbContext
,以透過相依性插入容器使用。 方法會採用連接名稱參數。
builder.AddOracleDatabaseDbContext<ExampleDbContext>(connectionName: "oracledb");
提示
connectionName
參數必須符合在應用程式主專案中新增 Oracle 資料庫資源時所使用的名稱。 換句話說,當您呼叫 AddDatabase
並提供名稱 oracledb
時,在呼叫 AddOracleDatabaseDbContext
時也應使用相同的名稱。 如需詳細資訊,請參閱 新增 Oracle 伺服器和資料庫資源。
接著,您可以使用依賴注入來取得 DbContext 實例。 例如,若要從範例服務擷取連線:
public class ExampleService(ExampleDbContext context)
{
// Use database context...
}
如需相依性插入的詳細資訊,請參閱 .NET 相依性插入。
您可能偏好使用標準 Entity Framework 方法來取得資料庫內容,並將它新增至相依性插入容器:
builder.Services.AddDbContext<ExampleDbContext>(options =>
options.UseOracle(builder.Configuration.GetConnectionString("oracledb")
?? throw new InvalidOperationException("Connection string 'oracledb' not found.")));
注意
您傳遞給 GetConnectionString 方法的連接字串名稱必須符合在應用程式主專案中新增 Oracle 資源時所使用的名稱。 如需詳細資訊,請參閱 新增 Oracle 伺服器和資料庫資源。
當您以這種方式建立資料庫內容時,更有彈性,例如:
- 您可以重複使用資料庫內容的現有組態程式代碼,而不需將它重寫為 .NET.NET Aspire。
- 您可以使用 Entity Framework Core 攔截器來修改資料庫作業。
- 您可以選擇不使用 Entity Framework Core 上下文池化,在某些情況下可能會有更好的表現。
如果您使用此方法,您可以呼叫 .NET 方法,透過 .NET AspireEnrichOracleDatabaseDbContext樣式重試、健康情況檢查、記錄和遙測功能來增強資料庫內容:
builder.EnrichOracleDatabaseDbContext<ExampleDbContext>(
configureSettings: settings =>
{
settings.DisableRetry = false;
settings.CommandTimeout = 30 // seconds
});
settings
參數是 OracleEntityFrameworkCoreSettings 類別的實例。
.NET Aspire Oracle Entity Framework Core 整合提供多個組態方法和選項,以符合專案的需求和慣例。
從 [ConnectionStrings
組態] 區段使用連接字串時,您可以在呼叫 builder.AddOracleDatabaseDbContext<TContext>()
時提供連接字串的名稱:
builder.AddOracleDatabaseDbContext<ExampleDbContext>("oracleConnection");
連接字串是從組態區段 ConnectionStrings
擷取:
{
"ConnectionStrings": {
"oracleConnection": "Data Source=TORCL;User Id=OracleUser;Password=Non-default-P@ssw0rd;"
}
}
EnrichOracleDatabaseDbContext
不會使用 ConnectionStrings
組態區段,因為它預期在呼叫時已經註冊 DbContext
。
如需詳細資訊,請參閱 ODP.NET 檔案。
.NET Aspire
Oracle
Entity Framework Core 整合支援從組態檔中透過使用 Microsoft.Extensions.Configuration 金鑰提供 appsettings.json,例如 Aspire:Oracle:EntityFrameworkCore
。 如果您已在 [Aspire:Oracle:EntityFrameworkCore
] 區段中設定組態,您可以直接呼叫 方法,而不傳遞任何參數。
以下是設定一些可用選項的 appsettings.json 範例:
{
"Aspire": {
"Oracle": {
"EntityFrameworkCore": {
"DisableHealthChecks": true,
"DisableTracing": true,
"DisableRetry": false,
"CommandTimeout": 30
}
}
}
}
提示
CommandTimeout
屬性以秒為單位。 如上述範例所示設定時,逾時為 30 秒。
您也可以傳遞 Action<OracleEntityFrameworkCoreSettings>
委派來在代碼中設定部分或所有選項,例如從代碼中停用健康檢查:
builder.AddOracleDatabaseDbContext<ExampleDbContext>(
"oracle",
static settings => settings.DisableHealthChecks = true);
或
builder.EnrichOracleDatabaseDbContext<ExampleDbContext>(
static settings => settings.DisableHealthChecks = true);
以下是具有對應預設值的可設定選項:
名字 | 描述 |
---|---|
ConnectionString |
要連線之 Oracle 資料庫的連接字串。 |
DisableHealthChecks |
布爾值,指出是否停用資料庫健康情況檢查。 |
DisableTracing |
布爾值用來指示 OpenTelemetry 追蹤是否已停用。 |
DisableRetry |
布爾值,指出是否應該停用命令重試。 |
CommandTimeout |
等候命令執行的時間,以秒為單位。 |
根據預設,.NET.NET Aspire客戶端整合 的 健康檢查 已對所有服務啟用。 同樣地,許多 .NET.NET Aspire代管整合 也會啟用健康檢查端點。 如需詳細資訊,請參閱:
- .NET 在 C# 中應用程式健康情況檢查
中的 健康情況檢查
根據預設,.NET AspireOracleEntity Framework Core 整合會處理下列各項:
- 檢查 OracleEntityFrameworkCoreSettings.DisableHealthChecks 是否
true
。 - 如果是,請新增
DbContextHealthCheck
,這會呼叫 EF Core的 CanConnectAsync 方法。 健康情況檢查的名稱是TContext
類型的名稱。
.NET .NET Aspire 整合會自動設定日誌、追蹤和度量配置,有時稱為 可觀測性的支柱。 如需整合可觀察性和遙測的詳細資訊,請參閱 .NET.NET Aspire 整合概觀。 視支援服務而定,某些整合可能只支援其中一些功能。 例如,某些整合支援記錄和追蹤,但不支援計量。 您也可以使用 組態 一節中呈現的技術來停用遙測功能。
.NET Aspire Oracle Entity Framework Core 整合會使用下列記錄類別:
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
.NET Aspire Oracle Entity Framework Core 整合會使用 OpenTelemetry發出下列追蹤活動:
- OpenTelemetry. Instrumentation.EntityFrameworkCore
.NET Aspire Oracle Entity Framework Core 整合目前支援下列計量:
- Microsoft.EntityFrameworkCore
其他資源
訓練
學習路徑
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization