Lire en anglais

Partager via


intégration de .NET AspireOracleEntity Framework Core

inclut :intégration d'hébergement et Client intégration

Oracle Base de Données est un système de gestion de bases de données relationnelles très utilisé, développé et possédé par Oracle. L’intégration .NET AspireOracleEntity Framework Core vous permet de vous connecter à des serveurs Oracle existants ou de créer de nouveaux serveurs à partir de .NET avec l’image conteneur container-registry.orcale.com/databse/free.

Intégration de l’hébergement

L'hébergement .NET AspireOracle modélise le serveur comme type OracleDatabaseServerResource et la base de données comme type OracleDatabaseResource. Pour accéder à ces types et API, ajoutez le package NuGet 📦Aspire.Hosting.Oracle dans le projet hôte de l'application .

CLI .NET
dotnet add package Aspire.Hosting.Oracle

Pour plus d’informations, consultez dotnet add package ou Gérer les dépendances des packages dans les applications .NET.

Ajouter des ressources de serveur et de base de données Oracle

Dans votre projet hôte d’application, appelez AddOracle pour ajouter et retourner un générateur de ressources de serveur Oracle. Chaînez un appel au générateur de ressources retourné pour AddDatabase, pour ajouter une base de données Oracle à la ressource serveur :

C#
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...

Notes

Le conteneur de base de données Oracle peut être lent à démarrer. Il est donc préférable d’utiliser une durée de vie persistante pour éviter les redémarrages inutiles. Pour plus d’informations, consultez durée de vie des ressources du conteneur.

Lorsque .NET.NET Aspire ajoute une image conteneur à l’hôte d’application, comme illustré dans l’exemple précédent avec l’image container-registry.oracle.com/database/free, il crée un serveur Oracle sur votre ordinateur local. Une référence à votre générateur de ressources Oracle (la variable oracle) est utilisée pour ajouter une base de données. La base de données est nommée oracledb, puis ajoutée au ExampleProject. La ressource Oracle inclut une password aléatoire générée à l’aide de la méthode CreateDefaultPasswordParameter.

La méthode WithReference configure une connexion dans le ExampleProject nommé "oracledb". Pour plus d'informations, consultez Cycle de vie des ressources du conteneur.

Conseil

Si vous préférez vous connecter à un serveur Oracle existant, appelez AddConnectionString à la place. Pour plus d’informations, consultez Référencer les ressources existantes.

Ajouter Oracle ressource avec un paramètre de mot de passe

La ressource Oracle inclut les informations d’identification par défaut avec un mot de passe aléatoire. Oracle prend en charge les mots de passe par défaut basés sur la configuration à l’aide de la variable d’environnement ORACLE_PWD. Lorsque vous souhaitez fournir un mot de passe explicitement, vous pouvez le fournir en tant que paramètre :

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

Le code précédent obtient un paramètre à passer à l’API AddOracle et affecte en interne le paramètre à la variable d’environnement ORACLE_PWD du conteneur Oracle. Le paramètre password est généralement spécifié en tant que secret utilisateur :

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

Pour plus d’informations, consultez paramètres externes.

Ajouter une ressource Oracle avec le volume de données

Pour ajouter un volume de données à la ressource Oracle, appelez la méthode WithDataVolume :

C#
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...

Le volume de données est utilisé pour conserver les données Oracle en dehors du cycle de vie de son conteneur. Lorsqu’un paramètre name n’est pas fourni, le volume de données est monté à l'emplacement /opt/oracle/oradata dans le conteneur Oracle et le nom est généré aléatoirement. Pour plus d’informations sur les volumes de données et sur la raison pour laquelle ils sont préférés par rapport aux montages de liaison , consultez la documentation Docker : Volumes.

Avertissement

Le mot de passe est stocké dans le volume de données. Lors de l’utilisation d’un volume de données et si le mot de passe change, il ne fonctionnera pas tant que vous ne supprimez pas le volume.

Ajouter la ressource Oracle avec un montage de liaison de données

Pour ajouter un montage de liaison de données à la ressource Oracle, appelez la méthode WithDataBindMount :

C#
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...

Important

Les montages de liaison de données ont des fonctionnalités limitées par rapport aux volumes , qui offrent de meilleures performances, une portabilité accrue et une sécurité renforcée, les rendant ainsi plus adaptés aux environnements de production. Toutefois, les montages de liaison permettent un accès direct et une modification des fichiers sur le système hôte, ce qui est idéal pour le développement et les tests nécessitant des modifications en temps réel.

Les montages de liaison de données s’appuient sur le système de fichiers de l’ordinateur hôte pour conserver les données Oracle entre les redémarrages de conteneur. Le montage de liaison de données est monté sur le chemin d’accès C:\Oracle\Data sur Windows (ou /Oracle/Data sur Unix) sur l’ordinateur hôte dans le conteneur Oracle. Pour plus d’informations sur les montages de liaison de données, consultez Docker docs : Liaison de montages.

Vérifications d’intégrité de l’intégration d’hébergement

L’intégration d’hébergement Oracle ajoute automatiquement un contrôle d’intégrité pour la ressource Oracle. La vérification d’intégrité vérifie que le serveur Oracle est en cours d’exécution et qu’une connexion peut être établie à celle-ci.

L’intégration de l'hébergement s'appuie sur le package AspNetCore.HealthChecks. NuGet 📦Oracle.

intégration de Client

Vous avez besoin d’une Oracle base de données et d’une chaîne de connexion pour accéder à la base de données. Pour commencer à utiliser l’intégration du client .NET AspireOracle, installez le 📦Aspire.Oracle. EntityFrameworkCore package NuGet dans le projet consommant le client, c’est-à-dire le projet pour l’application qui utilise le client Oracle. L’intégration du client Oracle inscrit une instance de DbContext que vous pouvez utiliser pour interagir avec Oracle.

CLI .NET
dotnet add package Aspire.Oracle.EntityFrameworkCore

Ajouter Oracle client

Dans le fichier Program.cs de votre projet consommant le client, appelez la méthode d’extension AddOracleDatabaseDbContext sur n’importe quel IHostApplicationBuilder pour inscrire un DbContext à utiliser via le conteneur d’injection de dépendances. La méthode prend un paramètre de nom de connexion.

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

Conseil

Le paramètre connectionName doit correspondre au nom utilisé lors de l’ajout de la ressource de base de données Oracle dans le projet hôte de l’application. En d’autres termes, lorsque vous appelez AddDatabase et fournissez un nom de oracledb ce même nom doit être utilisé lors de l’appel de AddOracleDatabaseDbContext. Pour plus d’informations, consultez Ajouter les ressources serveur et base de données Oracle.

Vous pouvez ensuite récupérer l’instance DbContext à l’aide de l’injection de dépendances. Par exemple, pour récupérer la connexion à partir d’un exemple de service :

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

Pour plus d'informations sur l'injection de dépendances, consultez l’injection de dépendances .NET.

Ajouter le contexte de la base de données Oracle avec enrichissement

Pour enrichir le DbContext avec des services supplémentaires, tels que les réessais automatiques, les contrôles de santé, la journalisation et la télémétrie, appelez la méthode EnrichOracleDatabaseDbContext :

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

Le paramètre settings est une instance de la classe OracleEntityFrameworkCoreSettings.

Paramétrage

L’intégration .NET AspireOracleEntity Framework Core fournit plusieurs approches et options de configuration pour répondre aux exigences et conventions de votre projet.

Utiliser une chaîne de connexion

Lorsque vous utilisez une chaîne de connexion à partir de la section de configuration ConnectionStrings, vous fournissez le nom de la chaîne de connexion lors de l’appel de builder.AddOracleDatabaseDbContext<TContext>():

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

La chaîne de connexion est récupérée à partir de la section de configuration ConnectionStrings :

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

L'EnrichOracleDatabaseDbContext n’utilisera pas la section de configuration ConnectionStrings, car elle s’attend à ce qu’un DbContext soit inscrit au moment où il est appelé.

Pour plus d’informations, consultez la documentation ODP.NET.

Utiliser des fournisseurs de configuration

L’intégration .NET AspireOracleEntity Framework Core prend en charge Microsoft.Extensions.Configuration à partir de fichiers de configuration tels que appsettings.json à l’aide de la clé Aspire:Oracle:EntityFrameworkCore. Si vous avez configuré vos configurations dans la section Aspire:Oracle:EntityFrameworkCore, vous pouvez simplement appeler la méthode sans passer de paramètre.

Voici un exemple de appsettings.json qui configure certaines des options disponibles :

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

Conseil

La propriété CommandTimeout est en secondes. Lorsqu’il est défini comme indiqué dans l’exemple précédent, le délai d’expiration est de 30 secondes.

Utiliser des délégués en ligne

Vous pouvez également transmettre le délégué Action<OracleEntityFrameworkCoreSettings> pour configurer certaines ou toutes les options en ligne, par exemple pour désactiver les vérifications de santé à partir du code :

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

ou

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

Options de configuration

Voici les options configurables avec les valeurs par défaut correspondantes :

Nom Description
ConnectionString Chaîne de connexion de la base de données Oracle à laquelle se connecter.
DisableHealthChecks Valeur booléenne qui indique si la vérification d’intégrité de la base de données est désactivée ou non.
DisableTracing Valeur booléenne qui indique si le suivi OpenTelemetry est désactivé ou non.
DisableRetry Valeur booléenne qui indique si les nouvelles tentatives de commande doivent être désactivées ou non.
CommandTimeout Temps en secondes d’attente de l’exécution de la commande.

Vérifications d’intégrité

Par défaut, les intégrations .NET.NET Aspire permettent les contrôles de santé pour tous les services. Pour plus d’informations, consultez .NET.NET Aspire vue d’ensemble des intégrations.

Par défaut, l’intégration .NET AspireOracleEntity Framework Core gère les éléments suivants :

Observabilité et télémétrie

.NET .NET Aspire intégrations configurent automatiquement les configurations de journalisation, de suivi et de métriques, parfois appelées les piliers de l’observabilité. Pour plus d’informations sur l’observabilité de l’intégration et la télémétrie, consultez .NET.NET Aspire vue d’ensemble des intégrations. Selon le service de stockage, certaines intégrations peuvent uniquement prendre en charge certaines de ces fonctionnalités. Par exemple, certaines intégrations prennent en charge la journalisation et le suivi, mais pas les métriques. Les fonctionnalités de télémétrie peuvent également être désactivées à l’aide des techniques présentées dans la section Configuration.

Exploitation forestière

L’intégration .NET AspireOracleEntity Framework Core utilise les catégories de journaux de logs suivantes :

  • 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

Traçage

L’intégration .NET AspireOracleEntity Framework Core émet les activités de suivi suivantes à l’aide de OpenTelemetry:

  • OpenTelemetry.Instrumentation.EntityFrameworkCore

Métriques

L’intégration .NET AspireOracleEntity Framework Core prend actuellement en charge les métriques suivantes :

  • Microsoft.EntityFrameworkCore

Voir aussi