10-дневный .Net Aspire Challenge - День 3: Добавление компонента PGSQL

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#


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE