.NET Aspire Integratie van Pomelo MySQLEntity Framework Core
omvat:hostingintegratie en Client integratie
MySQL is een opensource Relational Database Management System (RDBMS) dat gebruikmaakt van Structured Query Language (SQL) voor het beheren en bewerken van gegevens. Het wordt gebruikt in een groot aantal verschillende omgevingen, van kleine projecten tot grootschalige bedrijfssystemen en het is een populaire keuze om gegevens te hosten die microservices in een cloudeigen toepassing ondersteunen. De .NET Aspire Pomelo MySQLEntity Framework Core-integratie stelt u in staat verbinding te maken met bestaande MySQL databases of nieuwe exemplaren te creëren van .NET met de mysql
containerafbeelding.
Hostingintegratie
De MySQL integreert de server als het MySqlServerResource-type en de database als het MySqlDatabaseResource-type. Als u toegang wilt krijgen tot deze typen en API's, voegt u het 📦Aspire.Hosting.MySql NuGet-pakket toe in het app hostingproject.
dotnet add package Aspire.Hosting.MySql
Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.
MySQL server bron en databasebron toevoegen
Roep in uw app-hostproject AddMySql aan om een MySQL bronbouwer toe te voegen en terug te geven. Koppel een aanroep aan de geretourneerde resourcebouwer met AddDatabaseom een MySQL databaseresource toe te voegen.
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...
Notitie
De
Wanneer .NET.NET Aspire een containerinstallatiekopie toevoegt aan de app-host, zoals wordt weergegeven in het vorige voorbeeld met de mysql
-installatiekopie, wordt er een nieuw MySQL exemplaar op uw lokale computer gemaakt. Een verwijzing naar de MySQL hulpbronnenbouwer (de mysql
-variabele) wordt gebruikt om een database toe te voegen. De database heeft de naam mysqldb
en wordt vervolgens toegevoegd aan de ExampleProject
. De MySQL-resource bevat standaardreferenties met een username
van root
en een willekeurige password
die met de CreateDefaultPasswordParameter-methode is gegenereerd.
Wanneer de applicatiehost wordt uitgevoerd, wordt het wachtwoord opgeslagen in de geheime opslag van de applicatiehost. Deze wordt toegevoegd aan de sectie Parameters
, bijvoorbeeld:
{
"Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}
De naam van de parameter is mysql-password
, maar eigenlijk is het alleen het opmaken van de resourcenaam met een -password
achtervoegsel. Zie Veilige opslag van app-geheimen in ontwikkeling in ASP.NET Core en MySQL resource toevoegen met parametersvoor meer informatie.
De methode WithReference configureert een verbinding in de ExampleProject
met de naam mysqldb
.
Fooi
Als u liever verbinding wilt maken met een bestaande MySQLserver, roept u in plaats daarvan AddConnectionString aan. Voor meer informatie, zie Raadpleeg bestaande bronnen.
Een MySQL-resource toevoegen met een gegevensvolume
Als u een gegevensvolume wilt toevoegen aan de SQL Server-resource, roept u de methode WithDataVolume aan voor de SQL Server resource:
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...
Het gegevensvolume wordt gebruikt om de MySQLserver gegevens buiten de levenscyclus van de container te behouden. Het gegevensvolume wordt gekoppeld aan het /var/lib/mysql
pad in de SQL Server container en wanneer er geen name
parameter wordt opgegeven, wordt de naam willekeurig gegenereerd. Voor meer informatie over gegevensvolumes en details over waarom ze de voorkeur hebben boven aankoppelpunten, zie Docker docs: Volumes.
Waarschuwing
Het wachtwoord wordt opgeslagen in het gegevensvolume. Wanneer u een gegevensvolume gebruikt en als het wachtwoord wordt gewijzigd, werkt het pas als u het volume verwijdert.
Een MySQL-resource toevoegen met een databind-mount
Als u een koppeling voor gegevensbinding wilt toevoegen aan de MySQL-resource, roept u de WithDataBindMount methode aan:
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...
Belangrijk
Gegevens koppelingen hebben beperkte functionaliteit in vergelijking met volumes, die betere prestaties, draagbaarheid en beveiliging bieden, waardoor ze geschikter zijn voor productieomgevingen. Bind mounts bieden echter directe toegang tot en wijziging van bestanden op het hostsysteem, wat ideaal is voor ontwikkeling en testen waarbij wijzigingen in real time nodig zijn.
Gegevensbindingen zijn afhankelijk van het bestandssysteem van de hostmachine om de MySQL-gegevens bij het herstarten van de container te behouden. De koppeling voor gegevensbinding wordt gekoppeld aan de C:\MySql\Data
in Windows (of /MySql/Data
op Unix) op de hostcomputer in de MySQL container. Zie Docker docs: Bindingskoppelingenvoor meer informatie over koppelingskoppelingen voor gegevens.
MySQL resource toevoegen met parameters
Wanneer u een hoofdwachtwoord MySQL expliciet wilt opgeven, kunt u dit doorgeven als parameter. Bekijk het volgende alternatieve voorbeeld:
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);
Zie Externe parametersvoor meer informatie.
Een PhpMyAdmin-resource toevoegen
phpMyAdmin is een populair webbeheerprogramma voor MySQL. U kunt deze gebruiken om door MySQL objecten zoals databases, tabellen, weergaven en indexen te bladeren en te wijzigen. Als u phpMyAdmin in uw .NET.NET Aspire-oplossing wilt gebruiken, roept u de methode WithPhpMyAdmin aan. Met deze methode wordt een nieuwe containerresource toegevoegd aan de oplossing die phpMyAdmin host en deze verbindt met de MySQL-container:
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...
Wanneer u de oplossing uitvoert, worden in het .NET.NET Aspire dashboard de phpMyAdmin-resources met een eindpunt weergegeven. Selecteer de koppeling naar het eindpunt om phpMyAdmin weer te geven in een nieuw browsertabblad.
Gezondheidscontroles voor hostingintegratie
De MySQL hostingintegratie voegt automatisch een statuscontrole toe voor de MySQL resource. De gezondheidscontrole controleert of de MySQLserver actief is en of er een verbinding mee tot stand kan worden gebracht.
De hostingintegratie is afhankelijk van de 📦 AspNetCore.HealthChecks.MySql NuGet-pakket.
integratie van Client
Installeer de 📦Aspireom aan de slag te gaan met de .NET Aspire Pomelo MySQL Entity Framework-integratie. Pomelo.EntityFrameworkCore.MySql NuGet-pakket in het clientverbruikende project, dat wil gezegd het project voor de toepassing die gebruikmaakt van de MySQLEntity Framework Coreclient.
dotnet add package Aspire.Pomelo.EntityFrameworkCore.MySql
Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.
Een MySQL-databasecontext toevoegen
Roep in het Program.cs bestand van uw clientverbruikende project de AddMySqlDbContext-extensiemethode aan op een IHostApplicationBuilder om een DbContext te registreren voor gebruik via de container voor afhankelijkheidsinjectie. De methode gebruikt een verbindingsnaamparameter.
builder.AddMySqlDbContext<ExampleDbContext>(connectionName: "mysqldb");
Tip
De parameter connectionName
moet overeenkomen met de naam die wordt gebruikt bij het toevoegen van de SQL Server databaseresource in het app-hostproject. Met andere woorden, wanneer u AddDatabase
aanroept en een naam opgeeft van mysqldb
diezelfde naam moet worden gebruikt bij het aanroepen van AddMySqlDbContext
. Voor meer informatie, zie server-resource en MySQL-databaseresource toevoegen.
Ga als volgende te werk om ExampleDbContext
object op te halen uit een service:
public class ExampleService(ExampleDbContext context)
{
// Use context...
}
Voor meer informatie over afhankelijkheidsinjectie, zie .NET afhankelijkheidsinjectie.
Een MySQL-databasecontext toevoegen met verrijking
Als u de DbContext
wilt verrijken met aanvullende services, zoals automatische herhalingen, statuscontroles, logging en telemetrie, roept u de methode EnrichMySqlDbContext aan.
builder.EnrichMySqlDbContext<ExampleDbContext>(
connectionName: "mysqldb",
configureSettings: settings =>
{
settings.DisableRetry = false;
settings.CommandTimeout = 30 // seconds
});
De parameter settings
is een exemplaar van de klasse PomeloEntityFrameworkCoreMySqlSettings.
Configuratie
De .NET Aspire Pomelo MySQLEntity Framework Core integratie biedt meerdere opties voor het configureren van de databaseverbinding op basis van de vereisten en conventies van uw project.
Een verbindingsreeks gebruiken
Wanneer u een verbindingsreeks uit de sectie ConnectionStrings
configuratie gebruikt, kunt u de naam van de verbindingsreeks opgeven bij het aanroepen van builder.AddMySqlDatabaseDbContext<TContext>()
:
builder.AddMySqlDatabaseDbContext<MyDbContext>("mysql");
Vervolgens wordt de verbindingsreeks opgehaald uit de sectie ConnectionStrings
configuratie:
{
"ConnectionStrings": {
"mysql": "Server=mysql;Database=mysqldb"
}
}
De EnrichMySqlDbContext
maakt geen gebruik van de ConnectionStrings
configuratiesectie, omdat er een DbContext
wordt verwacht die moet worden geregistreerd op het punt dat deze wordt aangeroepen.
Zie de MySqlConnector: ConnectionString-documentatievoor meer informatie.
Configuratieproviders gebruiken
De .NET Aspire Pomelo MySQLEntity Framework Core integratie ondersteunt Microsoft.Extensions.Configuration. Het laadt de PomeloEntityFrameworkCoreMySqlSettings uit configuratiebestanden zoals appsettings.json met behulp van de Aspire:Pomelo:EntityFrameworkCore:MySql
sleutel.
In het volgende voorbeeld ziet u een appsettings.json waarmee een aantal van de beschikbare opties wordt geconfigureerd:
{
"Aspire": {
"Pomelo": {
"EntityFrameworkCore": {
"MySql": {
"ConnectionString": "YOUR_CONNECTIONSTRING",
"DisableHealthChecks": true,
"DisableTracing": true
}
}
}
}
}
Inline gedelegeerden gebruiken
U kunt ook de Action<PomeloEntityFrameworkCoreMySqlSettings>
delegate doorgeven om sommige of alle opties inline in te stellen, bijvoorbeeld om gezondheidscontroles vanuit code uit te schakelen.
builder.AddMySqlDbContext<MyDbContext>(
"mysqldb",
static settings => settings.DisableHealthChecks = true);
of
builder.EnrichMySqlDbContext<MyDbContext>(
static settings => settings.DisableHealthChecks = true);
Gezondheidscontroles
Standaard kunnen .NET.NET Aspire integraties statuscontroles voor alle services inschakelen. Zie .NET.NET Aspire overzicht van integratiesvoor meer informatie.
De .NET Aspire Pomelo MySQLEntity Framework Core integratie:
- Voegt de gezondheidscontrole toe wanneer PomeloEntityFrameworkCoreMySqlSettings.DisableHealthChecks gelijk is aan
false
, waarmee de CanConnectAsync-methode van EF Corewordt aangeroepen. - Integreert met het
/health
HTTP-eindpunt, dat specificeert dat alle geregistreerde gezondheidscontroles moeten slagen opdat de app klaar is om verkeer te accepteren.
Waarneembaarheid en telemetrie
.NET .NET Aspire integraties configureren automatisch logging-, tracing- en metriekenconfiguraties, die ook wel worden genoemd als de pijlers van observability. Zie .NET.NET Aspire overzicht van integratieintegratiesvoor meer informatie over de waarneembaarheid en telemetrie van integraties. Afhankelijk van de back-upservice ondersteunen sommige integraties mogelijk slechts enkele van deze functies. Sommige integraties ondersteunen bijvoorbeeld logboekregistratie en tracering, maar geen metrische gegevens. Telemetriefuncties kunnen ook worden uitgeschakeld met behulp van de technieken die worden weergegeven in de sectie Configuratie.
Logboekregistratie
De integratie van .NET Aspire Pomelo MySQLEntity Framework Core maakt gebruik van de volgende logboekcategorieën:
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
Traceren
De integratie van .NET Aspire Pomelo MySQLEntity Framework Core verzendt de volgende traceringsactiviteiten met behulp van OpenTelemetry:
MySqlConnector
Statistieken
De integratie van .NET Aspire Pomelo MySQLEntity Framework Core ondersteunt momenteel de volgende metrische gegevens:
- 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