10-Day .Net Aspire Challenge: Day 4— Add Oracle Component
Introduction
.Net Aspire framework is used to develop cloud and production-ready distributed applications. It consists of components to handle cloud-native concerns such as Redis, Postgres etc.
Prerequisites
Install .Net 8
Install Visual Studio 2022 version 17 or higher
.Net Aspire Workload
Container runtime such as Docker Desktop
Objectives
Learn how to create a starter project using .Net Aspire with the Oracle EF Core component.
Github Sample: The solution structure is divided into the following projects
DotnetAspireChallenge.ApiService
DotnetAspireChallenge.AppHost
DotnetAspireChallenge.ServiceDefaults
DotnetAspireChallenge.Web
Getting Started
Step 1: Install the following NuGet package
Install the following Nuget package into the subsequent project “DotnetAspireChallenge.AppHost”
dotnet add package Aspire.Hosting.Oracle
In the above project, register a server database and consume the Oracle connection using the following code.
var oracle = builder.AddOracle("oracle")
.AddDatabase("oracledb");
var apiService = builder.AddProject<Projects.DotnetAspireChallenge_ApiService>("apiservice")
.WithReference(oracle);
Step 2: Install another NuGet package
Install the following Nuget package into the subsequent project “DotnetAspireChallenge.ApiService”
dotnet add package Aspire.Oracle.EntityFrameworkCore
then register the context into the Program.cs file as follows
builder.AddOracleDatabaseDbContext<OracleDbContext>("oracledb");
Step 3: Create a “Customer” class
public class Customer
{
public int Id { get; set; }
[Required]
public string Title { get; set; } = string.Empty;
[Required]
public string Description { get; set; } = string.Empty;
}
Step 4: Create an extension class
Create an extension class and register a minimal API get method to demonstrate the Oracle EF context usage in the API Service
public static class AspireOracleExtension
{
public static void MapOracleAspireEndpoint(this WebApplication app)
{
app.MapGet("/oracle", async (OracleDbContext oracleDbContext) =>
{
await oracleDbContext.Customer.AddAsync(new Customer()
{
Title = "test@gmail.com",
Description = "sukh"
});
int rows = await oracleDbContext.SaveChangesAsync();
if (rows > 0)
{
return await oracleDbContext.Customer.FirstOrDefaultAsync();
}
else
{
return null;
}
});
}
}
internal class OracleDbContext(DbContextOptions options) : DbContext(options)
{
public DbSet<Customer> CustomersPgsql => Set<Customer>();
}
and finally, register in the Program.cs file
app.MapOracleAspireEndpoint();
Step 5: Hit the GET endpoint
Finally, navigate to the GET URL shown below in your browser. It will insert the specified customer into the Oracle database, retrieve the most recently inserted row, and display it as a response.
Add additional connection string properties using the JSON syntax
{
"Aspire": {
"Oracle": {
"EntityFrameworkCore": {
"DisableHealthChecks": true,
"DisableTracing": true,
"DisableMetrics": false,
"DisableRetry": false,
"Timeout": 30
}
}
}
}
Congratulations..!! You’ve successfully integrated the Oracle component into the .Net Aspire project.
Github Project
GitHub — ssukhpinder/DotnetAspireChallenge: 10 Day .Net Aspire Challenge
C# Programming🚀
Thank you for being a part of the C# community!
Subscribe to my newsletter
Read articles from Sukhpinder Singh directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Sukhpinder Singh
Sukhpinder Singh
Hi there 👋 I'm Sukhpinder Singh, a passionate self-taught .Net developer from India. Worked on 10+ projects for SQL database design. Developed and maintained over 20 .NET websites with 100% client satisfaction. Skills C# | Microsoft Certified | Medium Blogger | .Net Core | Xamarin | ASP.Net | Angular