.NET Aspire Pomelo MySQLEntity Framework Core integração
Inclui:integração de hospedagem e Client integração
MySQL é um RDBMS (Sistema de Gerenciamento de Banco de Dados Relacional) de software livre que usa SQL (Structured Query Language) para gerenciar e manipular dados. Ele é empregado em vários ambientes diferentes, desde pequenos projetos até sistemas empresariais em grande escala e é uma escolha popular hospedar dados que sustentam microsserviços em um aplicativo nativo de nuvem. A integração .NET Aspire Pomelo MySQLEntity Framework Core permite que você se conecte a bancos de dados MySQL existentes ou crie novas instâncias de .NET com a imagem de contêiner mysql
.
Integração de hospedagem
A integração de hospedagem do MySQL modela o server como o tipo MySqlServerResource e o banco de dados como o tipo MySqlDatabaseResource. Para acessar esses tipos e APIs, adicione o 📦Aspire.Hosting.MySql pacote NuGet no projeto de host do aplicativo no.
dotnet add package Aspire.Hosting.MySql
Para obter mais informações, consulte dotnet add package ou Gerencie dependências de pacotes em .NET aplicativos.
Adicionar recurso MySQLserver e recurso de banco de dados
No projeto de host do aplicativo, chame AddMySql para adicionar e retornar um construtor de recursos MySQL. Encadeie uma chamada para o construtor de recursos retornado para AddDatabase, a fim de adicionar um recurso de banco de dados 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...
Nota
O contêiner SQL Server é lento para iniciar, portanto, é melhor usar um ciclo de vida persistente para evitar reinicializações desnecessárias. Para obter mais informações, consulte Vida útil do recurso do contêiner.
Quando .NET.NET Aspire adiciona uma imagem de contêiner ao host do aplicativo, conforme mostrado no exemplo anterior com a imagem mysql
, ele cria uma nova instância de MySQL em seu computador local. Uma referência ao construtor de recursos MySQL (a variável mysql
) é usada para adicionar um banco de dados. O banco de dados é nomeado mysqldb
e, em seguida, adicionado ao ExampleProject
. O recurso MySQL inclui credenciais padrão com um username
de root
e um password
aleatório gerado usando o método CreateDefaultPasswordParameter.
Quando o host do aplicativo é executado, a senha é armazenada no repositório secreto do host do aplicativo. Ele é adicionado à seção Parameters
, por exemplo:
{
"Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}
O nome do parâmetro é mysql-password
, mas na verdade é apenas formatar o nome do recurso com um sufixo -password
. Para obter mais informações, consulte Armazenamento seguro de segredos do aplicativo no desenvolvimento em ASP.NET Core e Adicionar MySQL recurso com parâmetros.
O método WithReference configura uma conexão no ExampleProject
denominado mysqldb
.
Dica
Se você preferir se conectar a um MySQLserverexistente, chame AddConnectionString em vez disso. Para obter mais informações, consulte Referenciar recursos existentes.
Adicionar um recurso MySQL com um volume de dados
Para adicionar um volume de dados ao recurso SQL Server, chame o método WithDataVolume no recurso 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...
O volume de dados é usado para persistir os dados MySQLserver fora do ciclo de vida de seu contêiner. O volume de dados é montado no caminho /var/lib/mysql
no contêiner SQL Server e, quando um parâmetro name
não é fornecido, o nome é gerado aleatoriamente. Para obter mais informações sobre volumes de dados e detalhes sobre por que eles são preferenciais em vez de associar montagens, consulte Docker documentos: Volumes.
Aviso
A senha é armazenada no volume de dados. Ao usar um volume de dados e se a senha for alterada, ela não funcionará até que você exclua o volume.
Adicionar um recurso MySQL com uma montagem de associação de dados
Para adicionar uma montagem de associação de dados ao recurso MySQL, chame o método 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...
Importante
Os de dados associam montagens têm funcionalidade limitada em comparação com volumes, que oferecem melhor desempenho, portabilidade e segurança, tornando-os mais adequados para ambientes de produção. No entanto, bind mounts (montagens de associação) permitem acesso direto e modificação de arquivos no sistema host, o que é ideal para desenvolvimento e teste, onde são necessárias alterações em tempo real.
As montagens de associação de dados dependem do sistema de arquivos do computador host para persistir os dados MySQL entre reinicializações de contêiner. A montagem da associação de dados é montada no caminho C:\MySql\Data
no Windows (ou /MySql/Data
no Unix) no computador host no contêiner MySQL. Para obter mais informações sobre bind mounts de dados, consulte a documentação Docker: Bind mounts.
Adicionar MySQL recurso com parâmetros
Quando você deseja fornecer explicitamente uma senha raiz MySQL, pode passá-la como um parâmetro. Considere o seguinte exemplo alternativo:
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);
Para obter mais informações, consulte Parâmetros externos.
Adicionar um recurso phpMyAdmin
phpMyAdmin é uma ferramenta de administração popular baseada na Web para MySQL. Você pode usá-lo para navegar e modificar MySQL objetos, como bancos de dados, tabelas, exibições e índices. Para usar phpMyAdmin em sua solução de .NET.NET Aspire, chame o método WithPhpMyAdmin. Esse método adiciona um novo recurso de contêiner à solução que hospeda phpMyAdmin e o conecta ao contêiner 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...
Quando você executa a solução, o painel .NET.NET Aspire exibe os recursos do phpMyAdmin com um endereço. Selecione o link para o endpoint para exibir phpMyAdmin em uma nova aba do navegador.
Verificações de saúde da integração de hospedagem
A integração de hospedagem MySQL adiciona automaticamente uma verificação de integridade para o recurso de MySQL. A verificação de integridade verifica se o MySQLserver está em execução e se uma conexão pode ser estabelecida com ele.
A integração de hospedagem depende do 📦 AspNetCore.HealthChecks e doMySql pacote NuGet.
integração Client
Para começar a usar a integração .NET Aspire Pomelo MySQL Entity Framework, instale o 📦Aspire. Pomelo.EntityFrameworkCore.MySql pacote NuGet no projeto que consome client, ou seja, o projeto do aplicativo que usa o MySQLEntity Framework Coreclient.
dotnet add package Aspire.Pomelo.EntityFrameworkCore.MySql
Para obter mais informações, consulte dotnet add package ou Gerencie dependências de pacotes em .NET aplicativos.
Adicione um contexto de banco de dados MySQL
No arquivo Program.cs do seu projeto de consumo de client, chame o método de extensão AddMySqlDbContext em qualquer IHostApplicationBuilder para registrar um DbContext para uso por meio do contêiner de injeção de dependência. O método usa um parâmetro de nome de conexão.
builder.AddMySqlDbContext<ExampleDbContext>(connectionName: "mysqldb");
Dica
O parâmetro connectionName
deve corresponder ao nome usado ao adicionar o recurso de banco de dados SQL Server no projeto de host do aplicativo. Em outras palavras, quando você chama AddDatabase
e fornece um nome de mysqldb
esse mesmo nome deve ser usado ao chamar AddMySqlDbContext
. Para obter mais informações, consulte Adicionar MySQLserver e recurso de banco de dados.
Para recuperar o objeto ExampleDbContext
de um serviço:
public class ExampleService(ExampleDbContext context)
{
// Use context...
}
Para obter mais informações sobre injeção de dependência, consulte .NET injeção de dependência.
Adicionar um contexto de banco de dados MySQL com enriquecimento
Para enriquecer o DbContext
com serviços adicionais, como repetições automáticas, verificações de integridade, registro em log e telemetria, chame o método EnrichMySqlDbContext:
builder.EnrichMySqlDbContext<ExampleDbContext>(
connectionName: "mysqldb",
configureSettings: settings =>
{
settings.DisableRetry = false;
settings.CommandTimeout = 30 // seconds
});
O parâmetro settings
é uma instância da classe PomeloEntityFrameworkCoreMySqlSettings.
Configuração
A integração .NET Aspire Pomelo MySQLEntity Framework Core fornece várias opções para configurar a conexão de banco de dados com base nos requisitos e convenções do seu projeto.
Usar uma string de conexão
Ao usar uma cadeia de conexão da seção de configuração ConnectionStrings
, você pode fornecer o nome da cadeia de conexão ao chamar builder.AddMySqlDatabaseDbContext<TContext>()
:
builder.AddMySqlDatabaseDbContext<MyDbContext>("mysql");
Em seguida, a cadeia de conexão será recuperada da seção de configuração do ConnectionStrings
:
{
"ConnectionStrings": {
"mysql": "Server=mysql;Database=mysqldb"
}
}
O EnrichMySqlDbContext
não usará a seção de configuração de ConnectionStrings
, pois espera que um DbContext
seja registrado no ponto em que é chamado.
Para obter mais informações, consulte a documentação MySqlConnector: ConnectionString.
Usar provedores de configuração
A integração do .NET Aspire Pomelo MySQLEntity Framework Core dá suporte a Microsoft.Extensions.Configuration. Ele carrega o PomeloEntityFrameworkCoreMySqlSettings de arquivos de configuração, como appsettings.json usando a chave Aspire:Pomelo:EntityFrameworkCore:MySql
.
O exemplo a seguir mostra um appsettings.json que configura algumas das opções disponíveis:
{
"Aspire": {
"Pomelo": {
"EntityFrameworkCore": {
"MySql": {
"ConnectionString": "YOUR_CONNECTIONSTRING",
"DisableHealthChecks": true,
"DisableTracing": true
}
}
}
}
}
Para o esquema completo de integração MySQLJSON, consulte Aspire. Pomelo.EntityFrameworkCore.MySql/ConfigurationSchema.json.
Usar delegados embutidos
Você também pode passar o delegado Action<PomeloEntityFrameworkCoreMySqlSettings>
para configurar algumas ou todas as opções embutidas, por exemplo, para desabilitar verificações de integridade do código:
builder.AddMySqlDbContext<MyDbContext>(
"mysqldb",
static settings => settings.DisableHealthChecks = true);
ou
builder.EnrichMySqlDbContext<MyDbContext>(
static settings => settings.DisableHealthChecks = true);
Verificações de saúde
Por padrão, as integrações .NET.NET Aspire habilitam verificações de saúde para todos os serviços. Para obter mais informações, consulte .NET.NET Aspire visão geral de integrações.
A integração .NET Aspire Pomelo MySQLEntity Framework Core:
- Adiciona a verificação de integridade quando PomeloEntityFrameworkCoreMySqlSettings.DisableHealthChecks é
false
, que chama o método CanConnectAsync de EF Core. - Integra-se com o endpoint HTTP
/health
, que especifica que todas as verificações de integridade registradas devem ser aprovadas para que o app seja considerado pronto para aceitar tráfego.
Observabilidade e telemetria
.NET .NET Aspire integrações configuram automaticamente configurações de Log, Rastreamento e Métricas, que às vezes são conhecidas como os pilares da observabilidade. Para obter mais informações sobre a observabilidade e a telemetria de integração, consulte .NET.NET Aspire visão geral das integrações. Dependendo do serviço de backup, algumas integrações só podem dar suporte a alguns desses recursos. Por exemplo, algumas integrações dão suporte a registro em log e rastreamento, mas não a métricas. Os recursos de telemetria também podem ser desabilitados usando as técnicas apresentadas na seção Configuration.
Registro de Atividades
A integração do .NET Aspire Pomelo MySQLEntity Framework Core usa as seguintes categorias de log:
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
Rastreamento
A integração do .NET Aspire Pomelo MySQLEntity Framework Core emitirá as seguintes atividades de rastreamento usando OpenTelemetry:
MySqlConnector
Métricas
A integração do .NET Aspire Pomelo MySQLEntity Framework Core atualmente dá suporte às seguintes métricas:
- 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