Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              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 Aspire Pomelo-integreringenMySQLEntity Framework Corekan du ansluta till befintliga MySQL databaser eller skapa nya instanser från .NET med containeravbildningenmysql.
Värdintegrering
MySQL integreringsvärd modellerar servern som typen MySqlServerResource och databasen som typen MySqlDatabaseResource. Om du vill komma åt dessa typer och API:er lägger du till 📦Aspire. Hosting.MySql NuGet-paketet i AppHost-projektet .
dotnet add package Aspire.Hosting.MySql
Mer information finns i dotnet add package eller Hantera paketberoenden i .NET program.
Lägg till MySQL serverresurs och databasresurs
I ditt AppHost-projekt använder du AddMySql för att lägga till och returnera en MySQL resurskompilator. 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...
Anmärkning
Det går långsamt att starta containern SQL Server , så det är bäst att använda en beständig livslängd för att undvika onödiga omstarter. Mer information finns i Livslängd för containerresurser.
När Aspire lägger till en containeravbildning i AppHost, som du ser i föregående exempel med avbildningen mysql, skapas en ny instans av MySQL 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 AppHost körs lagras lösenordet i AppHosts hemliga arkiv. 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 MySQL server anropar 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 MySQL serverdata utanför containerns livscykel. Den datavolymen monteras på sökvägen /var/lib/mysql i containern SQL Server, och om en name parameter inte anges, genereras namnet slumpmässigt. Mer information om datavolymer och information om varför de föredras framför bindningsmonteringar finns 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.
Viktig
Vissa databasintegreringar, inklusive integreringen AspireMySQL, kan inte framgångsrikt använda datavolymer efter utplaceringen till Azure Container Apps (ACA). Det beror på att ACA använder Server Message Block (SMB) för att ansluta containrar till datavolymer, och vissa system kan inte använda den här anslutningen. Aspire På instrumentpanelen har en databas som påverkas av det här problemet statusen Aktivering eller Aktivering misslyckades men visas aldrig som Körs.
Du kan lösa problemet genom att distribuera till ett Kubernetes kluster, till exempel AzureKubernetes Tjänster (AKS). Mer information finns i Aspire distributioner.
Lägga till en MySQL resurs med en databindningsmontering
Om du vill lägga till en databindningspunkt 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 bind mounts har begränsad funktionalitet jämfört med volymer, som erbjuder bättre prestanda, portabilitet och säkerhet, och därmed är 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 databindningsmonteringar finns i Docker dokument: Bindningsmonteringar.
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 Aspire lösning anropar du WithPhpMyAdmin metoden. 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 Aspire visar instrumentpanelen phpMyAdmin-resurserna med en slutpunkt. Välj länken till slutpunkten för att visa phpMyAdmin på en ny webbläsarflik.
Hälsokontroller för värdintegreringssystem
MySQL värdintegrering lägger automatiskt till en hälsokontroll för den MySQL resursen. Hälsokontrollen verifierar att MySQL-servern körs och att en anslutning kan upprättas till den.
Värdintegrationen är beroende av 📦 NuGet-paketet AspNetCore.HealthChecks.MySql .
Client integrering
Kom igång med Pomelo Aspire Entity Framework-integreringen MySQL genom att 📦Aspireinstallera . Pomelo.EntityFrameworkCore.MySql NuGet-paketet i det klientkrävande projektet, dvs. projektet för programmet som använder MySQLEntity Framework Core klienten.
dotnet add package Aspire.Pomelo.EntityFrameworkCore.MySql
Mer information finns i dotnet add package eller Hantera paketberoenden i .NET program.
Lägga till en MySQL databaskontext
I Program.cs-filen för ditt klientanvändande projekt, anropar du AddMySqlDbContext-tilläggsmetoden på alla IHostApplicationBuilder för att registrera ett 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 databasresursen SQL Server i AppHost-projektet. 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ägga till MySQL serverresurs 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.
Förbättra en MySQL databaskontext
Du kanske föredrar att använda entitetsramverkets standardmetod för att hämta en databaskontext och lägga till den i containern för beroendeinmatning:
builder.Services.AddDbContext<ExampleDbContext>(options =>
    options.UseMySql(builder.Configuration.GetConnectionString("mysqldb")
        ?? throw new InvalidOperationException("Connection string 'mysqldb' not found.")));
Anmärkning
Namnet på anslutningssträngen GetConnectionString som du skickar till metoden måste matcha namnet som användes när du lägger till resursen MySQL i AppHost-projektet. Mer information finns i Lägga till MySQL serverresurs och databasresurs.
Du har större flexibilitet när du skapar databaskontexten på det här sättet, till exempel:
- Du kan återanvända befintlig konfigurationskod för databaskontexten utan att skriva om den för Aspire.
- Du kan använda Entity Framework Core interceptorer för att ändra databasåtgärder.
- Du kan välja att inte använda Entity Framework Core kontextpooler, vilket kan fungera bättre under vissa omständigheter.
Om du använder den här metoden kan du förbättra databaskontexten med Aspire-style-återförsök, hälsokontroller, loggning och telemetrifunktioner genom att anropa EnrichMySqlDbContext metoden:
builder.EnrichMySqlDbContext<ExampleDbContext>(
    configureSettings: settings =>
    {
        settings.DisableRetry = false;
        settings.CommandTimeout = 30 // seconds
    });
Parametern settings är en instans av klassen PomeloEntityFrameworkCoreMySqlSettings.
Konfiguration
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
              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);
Client hälsokontroller för integrering
Som standard Aspire har klientintegreringarhälsokontroller aktiverade för alla tjänster. På samma sätt möjliggör många Aspirehostingintegrationer även hälsokontrolländpunkter. Mer information finns i:
Aspire Pomelo MySQLEntity Framework Core Integrering:
- Lägger till hälsokontrollen när PomeloEntityFrameworkCoreMySqlSettings.DisableHealthChecks är false, som anropar EF Core:s CanConnectAsync-metod.
- Integrerar med /healthHTTP-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
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 Aspire översikten över 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 Konfiguration .
Skogsavverkning
Integreringen 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 Aspire Pomelo MySQLEntity Framework Core genererar följande spårningsaktiviteter med hjälp av OpenTelemetry:
- MySqlConnector
Mätetal
Integreringen 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