.NET Aspire Pomelo MySQLEntity Framework Core integration
omfattar:Som värd för integrering och Client integration
MySQL är ett RDBMS (Relational Database Management System) med öppen källkod som använder SQL (Structured Query Language) för att hantera och manipulera data. Det används i många olika miljöer, från små projekt till storskaliga företagssystem och det är ett populärt val att vara värd för data som ligger till grund för mikrotjänster i ett molnbaserat program. Med .NET Aspire Pomelo MySQLEntity Framework Core-integrering kan du ansluta till befintliga MySQL databaser eller skapa nya instanser från .NET med mysql
containeravbildningen.
Värdtjänstintegration
MySQL som är värd för integrering modellerar server som MySqlServerResource typ och databas som MySqlDatabaseResource typ. Om du vill komma åt dessa typer och API:er lägger du till 📦Aspire.Hosting.MySql NuGet-paket i appvärd projekt.
dotnet add package Aspire.Hosting.MySql
Mer information finns i dotnet add package eller Hantera paketberoenden i .NET applikationer.
Lägga till MySQLserver-resurser och databasresurser
I ditt appvärdprojekt anropar du AddMySql för att lägga till och returnera en resursbyggare MySQL. Länka ett anrop från den returnerade resursbyggaren till AddDatabaseför att lägga till en MySQL databasresurs.
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...
Not
Det går långsamt att starta SQL Server-containern, så det är bäst att använda en långvarig livstid för att undvika onödiga omstarter. För mer information, se Containerresursens livslängd.
När .NET.NET Aspire lägger till en containeravbildning i appvärd, som du ser i föregående exempel med mysql
-avbildningen, skapar den en ny MySQL-instans på din lokala dator. En referens till din MySQL resursbyggare (variabeln mysql
) används för att lägga till en databas. Databasen heter mysqldb
och läggs sedan till i ExampleProject
. Den MySQL resursen innehåller standardautentiseringsuppgifter med en username
av root
och en slumpmässig password
som genereras med hjälp av metoden CreateDefaultPasswordParameter.
När appvärden körs lagras lösenordet i appvärdens hemliga lagring. Det läggs till i avsnittet Parameters
, till exempel:
{
"Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}
Namnet på parametern är mysql-password
, men egentligen är det bara att formatera resursnamnet med ett -password
suffix. Mer information finns i Säker lagring av apphemligheter under utveckling i ASP.NET Core och Lägg till MySQL resurs med parametrar.
Metoden WithReference konfigurerar en anslutning i ExampleProject
med namnet mysqldb
.
Tips
Om du hellre vill ansluta till en befintlig MySQLserveranropar du AddConnectionString i stället. Mer information finns i Referera till befintliga resurser.
Lägga till en MySQL resurs med en datavolym
Om du vill lägga till en datavolym i resursen SQL Server anropar du metoden WithDataVolume på den SQL Server resursen:
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...
Datavolymen används för att bevara MySQLserver data utanför containerns livscykel. Datavolymen är monterad på platsen /var/lib/mysql
i containern SQL Server och när en name
-parametern inte anges, genereras namnet slumpmässigt. Mer information om datavolymer och varför de föredras framför bindningarfinns i Docker dokument: Volymer.
Varning
Lösenordet lagras i datavolymen. När du använder en datavolym och om lösenordet ändras fungerar det inte förrän du tar bort volymen.
Lägg till en MySQL-resurs med en databindningsmontering
Om du vill lägga till en databindningsmontering till resursen MySQL anropar du metoden 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...
Viktig
Data bindningsmonteringar har begränsade funktioner jämfört med volymer, vilket ger bättre prestanda, portabilitet och säkerhet, vilket gör dem mer lämpliga för produktionsmiljöer. Bindningsmonteringar tillåter dock direkt åtkomst och ändring av filer i värdsystemet, perfekt för utveckling och testning där realtidsändringar behövs.
Databindningsmonteringar förlitar sig på värddatorns filsystem för att bevara MySQL data mellan omstarter av containrar. Databindningsmonteringen monteras på sökvägen C:\MySql\Data
i Windows (eller /MySql/Data
på Unix) på värddatorn i MySQL-containern. Mer information om datamonteringar finns i Docker dokumentation: Bindmonteringar.
Lägga till MySQL resurs med parametrar
När du uttryckligen vill ange ett rotlösenord MySQL kan du skicka det som en parameter. Tänk dig följande alternativa exempel:
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);
Mer information finns i externa parametrar.
Lägga till en PhpMyAdmin-resurs
phpMyAdmin är ett populärt webbaserat administrationsverktyg för MySQL. Du kan använda den för att bläddra och ändra MySQL objekt som databaser, tabeller, vyer och index. Om du vill använda phpMyAdmin i din .NET.NET Aspire-lösning anropar du metoden WithPhpMyAdmin. Den här metoden lägger till en ny containerresurs i lösningen som är värd för phpMyAdmin och ansluter den till containern 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...
När du kör lösningen visar instrumentpanelen .NET.NET Aspire phpMyAdmin-resurser med en slutpunkt. Välj länken till slutpunkten för att visa phpMyAdmin på en ny webbläsarflik.
Värd för hälsokontroller för integrering
MySQL värdintegrering lägger automatiskt till en hälsokontroll för den MySQL resursen. Hälsokontrollen verifierar att MySQLserver körs och att en anslutning kan upprättas till den.
Värdtjänstintegrationen förlitar sig på 📦 AspNetCore.HealthChecks.MySql NuGet-paketet.
Client integrering
Om du vill komma igång med .NET Aspire Pomelo MySQL Entity Framework-integreringen, installerar du 📦Aspire.Pomelo.EntityFrameworkCore.MySql NuGet-paket i det projekt som konsumerar client, dvs. projektet för applikationen som använder MySQLEntity Framework Coreclient.
dotnet add package Aspire.Pomelo.EntityFrameworkCore.MySql
Mer information finns i dotnet add package eller Hantera paketberoenden i .NET applikationer.
Lägga till en MySQL databaskontext
I Program.cs-filen för ditt client-förbrukande projekt anropar du AddMySqlDbContext-tilläggsmetoden för varje IHostApplicationBuilder för att registrera en DbContext för användning via containern för beroendeinjektion. Metoden tar en parameter för anslutningsnamn.
builder.AddMySqlDbContext<ExampleDbContext>(connectionName: "mysqldb");
Tips
Parametern connectionName
måste matcha namnet som används när du lägger till SQL Server-databasresursen i appvärdprojektet. Med andra ord, när du anropar AddDatabase
och anger ett namn på mysqldb
ska samma namn användas när du anropar AddMySqlDbContext
. Mer information finns i Lägg till MySQLserver resurs och databasresurs.
Så här hämtar du ExampleDbContext
objekt från en tjänst:
public class ExampleService(ExampleDbContext context)
{
// Use context...
}
Mer information om beroendeinmatning finns i .NET beroendeinmatning.
Lägga till en MySQL databaskontext med berikning
Om du vill utöka DbContext
med ytterligare tjänster, till exempel automatiska återförsök, hälsokontroller, loggning och telemetri, anropar du metoden EnrichMySqlDbContext:
builder.EnrichMySqlDbContext<ExampleDbContext>(
connectionName: "mysqldb",
configureSettings: settings =>
{
settings.DisableRetry = false;
settings.CommandTimeout = 30 // seconds
});
Parametern settings
är en instans av klassen PomeloEntityFrameworkCoreMySqlSettings.
Konfiguration
.NET Aspire Pomelo MySQLEntity Framework Core-integreringen innehåller flera alternativ för att konfigurera databasanslutningen baserat på kraven och konventionerna i ditt projekt.
Använda en anslutningssträng
När du använder en anslutningssträng från ConnectionStrings
konfigurationsavsnittet kan du ange namnet på anslutningssträngen när du anropar builder.AddMySqlDatabaseDbContext<TContext>()
:
builder.AddMySqlDatabaseDbContext<MyDbContext>("mysql");
Och sedan hämtas anslutningssträngen från ConnectionStrings
-konfigurationsavsnittet:
{
"ConnectionStrings": {
"mysql": "Server=mysql;Database=mysqldb"
}
}
EnrichMySqlDbContext
använder inte ConnectionStrings
-konfigurationsavsnittet eftersom det förväntar sig att en DbContext
registreras vid den tidpunkt då den anropas.
Mer information finns i dokumentationen MySqlConnector: ConnectionString.
Använda konfigurationsprovidrar
.NET Aspire Pomelo MySQLEntity Framework Core integreringen stöder Microsoft.Extensions.Configuration. Den läser in PomeloEntityFrameworkCoreMySqlSettings från konfigurationsfiler som appsettings.json med hjälp av Aspire:Pomelo:EntityFrameworkCore:MySql
-nyckeln.
I följande exempel visas en appsettings.json som konfigurerar några av de tillgängliga alternativen:
{
"Aspire": {
"Pomelo": {
"EntityFrameworkCore": {
"MySql": {
"ConnectionString": "YOUR_CONNECTIONSTRING",
"DisableHealthChecks": true,
"DisableTracing": true
}
}
}
}
}
Det fullständiga MySQL integrationsschemat JSON finns i Aspire. Pomelo.EntityFrameworkCore.MySql/ConfigurationSchema.json.
Använd inline-delegater
Du kan också överföra delegeringen Action<PomeloEntityFrameworkCoreMySqlSettings>
för att konfigurera vissa eller alla alternativ direkt, till exempel för att inaktivera systemkontroller med kod.
builder.AddMySqlDbContext<MyDbContext>(
"mysqldb",
static settings => settings.DisableHealthChecks = true);
eller
builder.EnrichMySqlDbContext<MyDbContext>(
static settings => settings.DisableHealthChecks = true);
Hälsokontroller
Som standard aktiverar .NET.NET Aspire integreringar hälsokontroller för alla tjänster. Mer information finns i översikten över .NET.NET Aspire integreringar.
.NET Aspire Pomelo MySQLEntity Framework Core integration:
- Lägger till en hälsokontroll när PomeloEntityFrameworkCoreMySqlSettings.DisableHealthChecks är
false
, och anropar CanConnectAsync-metoden på EF Core. - Integrerar med
/health
HTTP-slutpunkt, som anger att alla registrerade hälsokontroller måste godkännas för att appen ska anses vara redo att acceptera trafik.
Observerbarhet och telemetri
.NET .NET Aspire integreringar konfigurerar automatiskt konfigurationer för loggning, spårning och mått, som ibland kallas grundpelarna för observerbarhet. Mer information om integreringsobservabilitet och telemetri finns i översikten över .NET.NET Aspire integreringar. Beroende på säkerhetskopieringstjänsten kanske vissa integreringar bara stöder vissa av dessa funktioner. Vissa integreringar stöder till exempel loggning och spårning, men inte mått. Telemetrifunktioner kan också inaktiveras med hjälp av de tekniker som visas i avsnittet Configuration.
Skogsavverkning
Integreringen .NET Aspire Pomelo MySQLEntity Framework Core använder följande loggkategorier:
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
Spårning
Integreringen .NET Aspire Pomelo MySQLEntity Framework Core genererar följande spårningsaktiviteter med hjälp av OpenTelemetry:
MySqlConnector
Mätetal
Integreringen .NET Aspire Pomelo MySQLEntity Framework Core stöder för närvarande följande mått:
- 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
Se även
.NET Aspire