Dela via


.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:

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