интеграция .NET Aspire Pomelo MySQLEntity Framework Core
Включает:интеграции размещения и Client интеграции
MySQL — это система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL) для управления данными и управления ими. Он используется в различных средах, от небольших проектов до крупномасштабных корпоративных систем, и это популярный выбор для размещения данных, которые лежат в основе микрослужб в облачном приложении. Интеграция
Интеграция хостинга
MySQL хостинг интеграция моделирует server как тип MySqlServerResource, а база данных как тип MySqlDatabaseResource. Чтобы получить доступ к этим типам и API, добавьте 📦Aspire. Хостинг.MySql пакет NuGet в проекте узла приложения .
dotnet add package Aspire.Hosting.MySql
Дополнительные сведения см. в статье dotnet add package or Manage package dependencies in .NET applications.
Добавление ресурса MySQLserver и ресурса базы данных
В проекте узла вашего приложения вызовите AddMySql, чтобы добавить построитель ресурсов MySQL и вернуть его. Примените вызов к возвращаемому билдеру ресурсов на AddDatabase, чтобы добавить ресурс базы данных MySQL.
var builder = DistributedApplication.CreateBuilder(args);
var mysql = builder.AddMySql("mysql")
.WithLifetime(ContainerLifetime.Persistent);
var mysqldb = mysql.AddDatabase("mysqldb");
var myService = builder.AddProject<Projects.ExampleProject>()
.WithReference(mysqldb)
.WaitFor(mysqldb);
// After adding all resources, run the app...
Заметка
Контейнер SQL Server медленно запускается, поэтому рекомендуется использовать постоянное время существования, чтобы избежать ненужных перезапусков. Для получения дополнительной информации см. срок существования ресурса контейнера.
Когда .NET.NET Aspire добавляет контейнерный образ в узел приложения, как показано в предыдущем примере с образом mysql
, контейнерный образ создает новый экземпляр MySQL на локальном компьютере. Ссылка на ваш построитель ресурсов MySQL (переменная mysql
) используется для добавления базы данных. База данных называется mysqldb
, а затем добавляется в ExampleProject
. Ресурс MySQL включает учетные данные по умолчанию с параметрами username
root
и случайным password
, сгенерированным с помощью метода CreateDefaultPasswordParameter.
При запуске узла приложения пароль хранится в хранилище секретов узла приложения. Он добавлен в раздел Parameters
, например:
{
"Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}
Имя параметра — mysql-password
, но на самом деле это просто форматирование имени ресурса с -password
суффиксом. Дополнительные сведения см. в разделе Безопасное хранение секретов приложений в разработке в ASP.NET Core и Добавление ресурса MySQL с параметрами.
Метод WithReference настраивает подключение в ExampleProject
с именем mysqldb
.
Совет
Если вы хотите подключиться к существующей MySQLserver, вызовите AddConnectionString вместо этого. Для получения более подробной информации см. статью Справочник по существующим ресурсам.
Добавьте ресурс MySQL с томом данных
Чтобы добавить том данных в ресурс SQL Server, вызовите метод WithDataVolume в ресурсе SQL Server:
var builder = DistributedApplication.CreateBuilder(args);
var mysql = builder.AddMySql("mysql")
.WithDataVolume();
var mysqldb = mysql.AddDatabase("mysqldb");
builder.AddProject<Projects.ExampleProject>()
.WithReference(mysqldb)
.WaitFor(mysqldb);
// After adding all resources, run the app...
Том данных используется для сохранения MySQLserver данных за пределами жизненного цикла контейнера. Том данных монтируется по пути /var/lib/mysql
в контейнере SQL Server, и если параметр name
не предоставлен, имя создается случайным образом. Дополнительная информация о томах данных и о причинах, по которым они предпочтительнее привязок, см. в документации Docker: Томы.
Предупреждение
Пароль хранится в томе данных. При использовании тома данных и при изменении пароля он не будет работать, пока не удалите том.
Добавление ресурса MySQL с подключением привязки данных
Чтобы добавить подключение привязки данных к ресурсу MySQL, вызовите метод WithDataBindMount:
var builder = DistributedApplication.CreateBuilder(args);
var mysql = builder.AddMySql("mysql")
.WithDataBindMount(source: @"C:\MySql\Data");
var db = sql.AddDatabase("mysqldb");
builder.AddProject<Projects.ExampleProject>()
.WithReference(mysqldb)
.WaitFor(mysqldb);
// After adding all resources, run the app...
Важный
Привязки данных имеют ограниченные функциональные возможности по сравнению с томами , которые обеспечивают более высокую производительность, переносимость и безопасность, что делает их более подходящими для производственных сред. Однако подключения через привязку позволяют напрямую получать доступ и изменять файлы в хост-системе, что идеально подходит для разработки и тестирования, где требуются изменения в реальном времени.
Монтажи привязки данных зависят от файловой системы хост-компьютера для сохранения данных MySQL при перезапусках контейнера. Монтирование привязки данных смонтировано по пути C:\MySql\Data
в Windows (или /MySql/Data
на Unix) на хост-компьютере в контейнере MySQL. Дополнительные сведения о монтировании привязок данных см. в документации по Docker: монтирование привязок.
Добавление ресурса MySQL с параметрами
Если вы хотите явно указать корневой MySQL пароль, его можно передать в качестве параметра. Рассмотрим следующий альтернативный пример:
var password = builder.AddParameter("password", secret: true);
var mysql = builder.AddMySql("mysql", password)
.WithLifetime(ContainerLifetime.Persistent);
var mysqldb = mysql.AddDatabase("mysqldb");
var myService = builder.AddProject<Projects.ExampleProject>()
.WithReference(mysqldb)
.WaitFor(mysqldb);
Дополнительные сведения см. в разделе Внешние параметры.
Добавление ресурса PhpMyAdmin
phpMyAdmin — это популярное средство администрирования в виде веб-приложения для MySQL. Его можно использовать для просмотра и изменения объектов MySQL, таких как базы данных, таблицы, представления и индексы. Чтобы использовать phpMyAdmin в решении .NET.NET Aspire, вызовите метод WithPhpMyAdmin. Этот метод добавляет новый ресурс контейнера в решение, на котором размещен phpMyAdmin, и подключает его к контейнеру MySQL:
var builder = DistributedApplication.CreateBuilder(args);
var mysql = builder.AddMySql("mysql")
.WithPhpMyAdmin();
var db = sql.AddDatabase("mysqldb");
builder.AddProject<Projects.ExampleProject>()
.WithReference(mysqldb)
.WaitFor(mysqldb);
// After adding all resources, run the app...
При запуске решения панель мониторинга .NET.NET Aspire отображает ресурсы phpMyAdmin с конечной точкой. Выберите ссылку на конечную точку, чтобы просмотреть phpMyAdmin на новой вкладке браузера.
Проверка работоспособности интеграции хостинга
Интеграция хостинга MySQL автоматически добавляет проверку работоспособности ресурса MySQL. Проверка работоспособности подтверждает, что MySQLserver запущена и что к ней можно установить соединение.
Интеграция размещения зависит от пакета NuGet 📦 AspNetCore.HealthChecks.MySql.
интеграция Client
Чтобы приступить к работе с интеграцией .NET Aspire Pomelo MySQL Entity Framework, установите пакет NuGet 📦Aspire. Pomelo.EntityFrameworkCoreMySql на проект, использующий client, то есть проект для приложения, использующего MySQLEntity Framework Coreclient.
dotnet add package Aspire.Pomelo.EntityFrameworkCore.MySql
Дополнительные сведения см. в статье dotnet add package or Manage package dependencies in .NET applications.
Добавить контекст базы данных MySQL
В файле Program.cs проекта client-потребляющем вызовите метод расширения AddMySqlDbContext для любого IHostApplicationBuilder, чтобы зарегистрировать DbContext для использования в контейнере внедрения зависимостей. Метод принимает параметр имени подключения.
builder.AddMySqlDbContext<ExampleDbContext>(connectionName: "mysqldb");
Совет
Параметр connectionName
должен соответствовать имени, используемому при добавлении ресурса базы данных SQL Server в проект узла приложения. Другими словами, при вызове AddDatabase
и указании имени mysqldb
то же имя следует использовать при вызове AddMySqlDbContext
. Дополнительные сведения см. в разделе Добавление ресурса MySQLserver и ресурса базы данных.
Чтобы получить объект ExampleDbContext
из службы:
public class ExampleService(ExampleDbContext context)
{
// Use context...
}
Дополнительные сведения о внедрении зависимостей см. в .NETвнедрение зависимостей.
Добавьте контекст базы данных MySQL с учетом обогащения
Чтобы дополнить DbContext
дополнительными службами, такими как автоматические повторные попытки, проверки работоспособности, ведение журнала и телеметрия, вызовите метод EnrichMySqlDbContext:
builder.EnrichMySqlDbContext<ExampleDbContext>(
connectionName: "mysqldb",
configureSettings: settings =>
{
settings.DisableRetry = false;
settings.CommandTimeout = 30 // seconds
});
Параметр settings
является экземпляром класса PomeloEntityFrameworkCoreMySqlSettings.
Конфигурация
Интеграция .NET Aspire Pomelo MySQLEntity Framework Core предоставляет несколько вариантов настройки подключения к базе данных в соответствии с требованиями и стандартами вашего проекта.
Используйте строку подключения
При использовании строки подключения из раздела конфигурации ConnectionStrings
можно указать имя строки подключения при вызове builder.AddMySqlDatabaseDbContext<TContext>()
:
builder.AddMySqlDatabaseDbContext<MyDbContext>("mysql");
Затем строка подключения будет извлечена из раздела конфигурации ConnectionStrings
:
{
"ConnectionStrings": {
"mysql": "Server=mysql;Database=mysqldb"
}
}
EnrichMySqlDbContext
не будет использовать раздел конфигурации ConnectionStrings
, так как ожидается, что DbContext
будет зарегистрирован в момент его вызова.
Дополнительные сведения см. в документации MySqlConnector: ConnectionString.
Использование поставщиков конфигураций
Интеграция .NET Aspire Pomelo MySQLEntity Framework Core поддерживает Microsoft.Extensions.Configuration. Он загружает PomeloEntityFrameworkCoreMySqlSettings из файлов конфигурации, таких как appsettings.json с помощью ключа Aspire:Pomelo:EntityFrameworkCore:MySql
.
В следующем примере показан appsettings.json, который конфигурирует некоторые из доступных параметров:
{
"Aspire": {
"Pomelo": {
"EntityFrameworkCore": {
"MySql": {
"ConnectionString": "YOUR_CONNECTIONSTRING",
"DisableHealthChecks": true,
"DisableTracing": true
}
}
}
}
}
Полная схема интеграции MySQLJSON доступна в Aspire. Pomelo.EntityFrameworkCore.MySql/ConfigurationSchema.json.
Использование встроенных делегатов
Также можно передать делегат Action<PomeloEntityFrameworkCoreMySqlSettings>
для настройки некоторых или всех параметров непосредственно в коде, например, чтобы отключить проверки состояния из кода.
builder.AddMySqlDbContext<MyDbContext>(
"mysqldb",
static settings => settings.DisableHealthChecks = true);
или
builder.EnrichMySqlDbContext<MyDbContext>(
static settings => settings.DisableHealthChecks = true);
Проверки состояния здоровья
По умолчанию .NET.NET Aspire интеграции разрешают проверки работоспособности для всех услуг. Дополнительные сведения см. в обзоре интеграции .NET.NET Aspire.
Интеграция .NET Aspire Pomelo MySQLEntity Framework Core:
- Добавляет проверку работоспособности, когда PomeloEntityFrameworkCoreMySqlSettings.DisableHealthChecks является
false
, которая вызывает метод CanConnectAsyncEF Core. - Интегрируется с HTTP-эндпоинтом
/health
, который указывает, что все зарегистрированные проверки работоспособности должны быть успешными, чтобы приложение считалось готовым принимать трафик.
Наблюдаемость и телеметрия
.NET
.NET Aspire интеграции автоматически настраивают конфигурации журналов, трассировки и метрик, которые иногда называются основами наблюдаемости. Дополнительные сведения об наблюдаемости интеграции и телеметрии см. в .NET.NET Aspire обзоре интеграции. В зависимости от резервной службы некоторые интеграции могут поддерживать только некоторые из этих функций. Например, некоторые интеграции поддерживают ведение журнала и трассировку, но не метрики. Функции телеметрии также можно отключить с помощью методов, представленных в разделе конфигурации
Лесозаготовка
Интеграция .NET Aspire Pomelo MySQLEntity 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 Pomelo MySQLEntity Framework Core будет генерировать следующие активности трассировки, используя OpenTelemetry.
MySqlConnector
Метрика
Интеграция .NET Aspire Pomelo MySQLEntity Framework Core в настоящее время поддерживает следующие метрики:
- MySqlConnector:
db.client.connections.create_time
db.client.connections.use_time
db.client.connections.wait_time
db.client.connections.idle.max
db.client.connections.idle.min
db.client.connections.max
db.client.connections.pending_requests
db.client.connections.timeouts
db.client.connections.usage
См. также
.NET Aspire