10-дневный .Net Aspire Challenge - День 3: Добавление компонента PGSQL
3 сентября 2024 г.Пошаговое руководство по использованию компонента .Net Aspire PGSQL в Visual Studio.
Введение
.Net Aspire Framework используется для разработки облачных и готовых к производству распределенных приложений. Он состоит из компонентов для обработки облачных задач, таких как Redis, Postgres и т. д.
Предпосылки
- Установить.Net 8
- УстановитьVisual Studio 2022версия 17 или выше
- Рабочая нагрузка .Net Aspire
- Среда выполнения контейнера, напримерРабочий стол Docker10-дневный челлендж .Net Aspire
Цели
Узнайте, как создать начальный проект с использованием .Net Aspire с компонентом PGSQL EF Core.
Образец Github: Структура решения разделена на следующие проекты
- DotnetAspireChallenge.ApiService
- DotnetAspireChallenge.AppHost
- DotnetAspireChallenge.ServiceDefaults
- DotnetAspireChallenge.Web
Начиная
Шаг 1: Установите следующий пакет NuGet
Установите следующий пакет Nuget в последующий проект «DotnetAspireChallenge.AppHost”
dotnet add package Aspire.Hosting.PostgreSQL
В приведенном выше проекте зарегистрируйте базу данных сервера и настройте соединение PGSQL, используя следующий код.
var postgres = builder.AddPostgres("postgres")
.AddDatabase("pgsqldata");
var apiService = builder.AddProject<Projects.DotnetAspireChallenge_ApiService>("apiservice")
.WithReference(postgres);
Шаг 2: Установите еще один пакет NuGet
Установите следующий пакет Nuget в последующий проект «DotnetAspireChallenge.ApiService”
dotnet add package Aspire.Npgsql.EntityFrameworkCore.PostgreSQL
затем зарегистрируйте контекст в файле Program.cs следующим образом
builder.AddNpgsqlDbContext<PgsqlDbContext>("pgsqldata");
Шаг 3: Создайте класс «Клиент»
public class Customer
{
public int Id { get; set; }
[Required]
public string Title { get; set; } = string.Empty;
[Required]
public string Description { get; set; } = string.Empty;
}
Шаг 4: Создайте класс расширения
Создайте класс расширения и зарегистрируйте минимальный метод API get для демонстрации использования контекста PGSQL в API Service.
public static class AspirePgsqlExtension
{
public static void MapPgsqlAspireEndpoint(this WebApplication app)
{
app.MapGet("/pgsql", async (PgsqlDbContext pgsqlDbContext) =>
{
await pgsqlDbContext.CustomersPgsql.AddAsync(new Customer()
{
Title = "test@gmail.com",
Description = "sukh"
});
int rows = await pgsqlDbContext.SaveChangesAsync();
if (rows > 0)
{
return await pgsqlDbContext.CustomersPgsql.FirstOrDefaultAsync();
}
else
{
return null;
}
});
}
}
internal class PgsqlDbContext(DbContextOptions options) : DbContext(options)
{
public DbSet<Customer> CustomersPgsql => Set<Customer>();
}
и наконец, зарегистрируйтесь в файле Program.cs
app.MapPgsqlAspireEndpoint();
Шаг 5: Нажмите конечную точку GET
Наконец, перейдите к URL-адресу GET в вашем браузере, как показано ниже. Он вставит указанного клиента в базу данных PGSQL, извлечет последнюю вставленную строку и отобразит ее в качестве ответа.
Добавьте дополнительные свойства строки подключения, используя синтаксис JSON
{
"Aspire": {
"Npgsql": {
"EntityFrameworkCore": {
"PostgreSQL": {
"ConnectionString": "YOUR_CONNECTIONSTRING",
"DbContextPooling": true,
"DisableHealthChecks": true,
"DisableTracing": true,
"AnotherDbContext": {
"ConnectionString": "AnotherDbContext_CONNECTIONSTRING",
"DisableTracing": false
}
}
}
}
}
}
Поздравляем!..!! Вы успешно интегрировали компонент PGSQL в проект .Net Aspire.
Просмотр показателей
Компонент .NET Aspire будет генерировать следующие метрики с использованием OpenTelemetry:
Microsoft.EntityFrameworkCore
- ec_Microsoft_EntityFrameworkCore_active_db_contexts
- ec_Microsoft_EntityFrameworkCore_всего_запросов
- ec_Microsoft_EntityFrameworkCore_queries_per_second
- ec_Microsoft_EntityFrameworkCore_total_save_changes
- ec_Microsoft_EntityFrameworkCore_save_changes_per_second
- ec_Microsoft_EntityFrameworkCore_compiled_query_cache_hit_rate
- ec_Microsoft_Entity_total_execution_strategy_operation_failures
- ec_Microsoft_E_execution_strategy_operation_failures_per_second
- ec_Microsoft_EntityFramew_total_optimistic_concurrency_failures
- ec_Microsoft_EntityF_optimistic_concurrency_failures_per_second
Npgsql
- ec_Npgsql_байт_записанных_в_секунду
- ec_Npgsql_байт_чтения_в_секунду
- ec_Npgsql_команд_в_секунду
- ec_Npgsql_total_commands
- ec_Npgsql_current_commands
- ec_Npgsql_failed_commands
- ec_Npgsql_prepared_commands_ratio
- ec_Npgsql_connection_pools
- ec_Npgsql_multiplexing_average_commands_per_batch
- ec_Npgsql_multiplexing_average_write_time_per_batch
Проект Github
GitHub — ssukhpinder/DotnetAspireChallenge: 10-дневный вызов .Net Aspire Challenge
Еще шпаргалок
Шпаргалки — .Net
Программирование на C#🚀
Спасибо, что вы являетесь частью сообщества C#! Прежде чем вы уйдете:
Подписывайтесь на нас:Ютуб | Х | LinkedIn | Dev.toПосетите наши другие платформы:GitHubБольше контента наПрограммирование на C#
Оригинал