Sdílet prostřednictvím


.NET Aspire Pomelo MySQLEntity Framework Core integrace

zahrnuje:integrace hostování a integrace Client

MySQL je opensourcový systém pro správu relačních databází (RDBMS), který ke správě a manipulaci s daty používá jazyk SQL (Structured Query Language). Používá se v mnoha různých prostředích, od malých projektů po rozsáhlé podnikové systémy a je oblíbenou volbou pro hostování dat, která jsou základem mikroslužeb v nativní cloudové aplikaci. Integrace .NET Aspire Pomelo MySQLEntity Framework Core umožňuje připojit se k existujícím databázím MySQL nebo vytvářet nové instance z .NET pomocí obrazu kontejneru mysql.

Integrace hostování

MySQL hostování integračních modelů server jako typ MySqlServerResource a databáze jako typ MySqlDatabaseResource. Pokud chcete získat přístup k těmto typům a rozhraním API, přidejte 📦Aspire.Hosting.MySql balíček NuGet v projektu hostitele aplikace .

dotnet add package Aspire.Hosting.MySql

Další informace najdete v tématu dotnet add package nebo Správa závislostí balíčků v aplikacích .NET.

Přidejte prostředek MySQLserver a databázový prostředek

V projektu hostitele aplikace zavolejte AddMySql a přidejte a vraťte tvůrce prostředků MySQL. Zřetězte volání na vrácený nástroj pro vytváření prostředků k AddDatabase, abyste přidali databázový prostředek 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...

Poznámka

Kontejner SQL Server se spouští pomalu, proto je nejlepší použít trvalou životnost , abyste se vyhnuli zbytečným restartům. Další informace najdete v tématu Životnost prostředků kontejneru.

Když .NET.NET Aspire přidá do hostitele aplikace image kontejneru, jak je znázorněno v předchozím příkladu s imagí mysql, vytvoří na místním počítači novou instanci MySQL. K přidání databáze se používá odkaz na tvůrce prostředků MySQL (proměnná mysql). Databáze se jmenuje mysqldb a pak se přidá do ExampleProject. Prostředek MySQL obsahuje výchozí přihlašovací údaje s username ve formě root a náhodným password vygenerovaným pomocí metody CreateDefaultPasswordParameter.

Když se hostitel aplikace spustí, heslo se uloží do úložiště tajných kódů hostitele aplikace. Přidává se do sekce Parameters, například:

{
  "Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}

Název parametru je mysql-password, ale ve skutečnosti pouze formátuje název prostředku s příponou -password. Další informace najdete v tématu Bezpečné ukládání tajných kódů aplikací při vývoji v ASP.NET Core a Přidání prostředku MySQL s parametry.

Metoda WithReference nakonfiguruje připojení v ExampleProject s názvem mysqldb.

Spropitné

Pokud byste se raději připojili k existujícímu MySQLserver, volejte místo toho AddConnectionString. Pro více informací se podívejte na Odkaz na existující prostředky.

Přidejte MySQL prostředek s datovým svazkem

Pokud chcete do prostředku SQL Server přidat datový svazek, zavolejte metodu WithDataVolume prostředku 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...

Objem dat se používá k zachování MySQLserver dat mimo životní cyklus kontejneru. Datový svazek se připojí k cestě /var/lib/mysql v kontejneru SQL Server a když není zadaný parametr name, název se náhodně vygeneruje. Další informace o datových svazcích a podrobnosti o tom, proč se upřednostňují před vazbovými připojeními, najdete v dokumentaci Docker: Svazky.

Varování

Heslo je uloženo v datovém svazku. Pokud se při použití datového svazku změní heslo, nebude fungovat, dokud svazek neodstraníte.

Přidejte prostředek MySQL s datovým úchytem

Pokud chcete přidat datovou vazbu k prostředku MySQL, zavolejte metodu 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...

Důležitý

Připojení vazby dat mají v porovnání s svazkyomezené funkce, které nabízejí lepší výkon, přenositelnost a zabezpečení, což je vhodnější pro produkční prostředí. Svazkování připojení však umožňuje přímý přístup a úpravy souborů v hostitelském systému, což je ideální pro vývoj a testování, kde jsou potřeba změny v reálném čase.

Datové vazby využívají systém souborů hostitelského počítače k zachování dat MySQL při restartování kontejneru. Vazba dat je připojena k C:\MySql\Data v systému Windows (nebo k /MySql/Data na Unix) na hostitelském počítači v rámci kontejneru MySQL. Další informace o připojeních datových vazeb najdete v dokumentaci Docker: Připojení vazby.

Přidejte prostředek MySQL s parametry

Pokud chcete zadat kořenové MySQL heslo explicitně, můžete ho předat jako parametr. Podívejte se na následující alternativní příklad:

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);

Další informace naleznete v tématu Externí parametry.

Přidejte prostředek PhpMyAdmin

phpMyAdmin je oblíbeným webovým nástrojem pro správu pro MySQL. Můžete ho použít k procházení a úpravě MySQL objektů, jako jsou databáze, tabulky, zobrazení a indexy. Pokud chcete v řešení .NET.NET Aspire použít phpMyAdmin, zavolejte metodu WithPhpMyAdmin. Tato metoda přidá nový prostředek kontejneru do řešení, které hostuje phpMyAdmin a připojí ho k kontejneru 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...

Při spuštění řešení se na řídicím panelu .NET.NET Aspire zobrazí prostředky phpMyAdmin s koncovým bodem. Výběrem odkazu na koncový bod zobrazíte phpMyAdmin na nové kartě prohlížeče.

Hostování kontrol stavu integrace

Integrace hostování MySQL automaticky přidá kontrolu stavu prostředku MySQL. Kontrola stavu ověřuje, že je MySQLserver spuštěná a že se k ní/nim dá navázat připojení.

Integrace hostování spoléhá na balíček NuGet 📦 AspNetCore.HealthChecks.MySql.

integrace Client

Pokud chcete začít s integrací .NET Aspire Pomelo MySQL Entity Framework, nainstalujte 📦Aspire.Pomelo.EntityFrameworkCore.MySql balíček NuGet v projektu, který používá client, což je projekt používající aplikaci MySQLEntity Framework Coreclient.

dotnet add package Aspire.Pomelo.EntityFrameworkCore.MySql

Další informace najdete v tématu dotnet add package nebo Spravovat závislosti balíčků v aplikacích .NET.

Přidejte kontext databáze MySQL

V souboru Program.cs projektu, který využívá client, zavolejte metodu rozšíření AddMySqlDbContext na libovolném IHostApplicationBuilder a zaregistrujte DbContext pro použití prostřednictvím kontejneru injektáže závislostí. Metoda přebírá parametr názvu připojení.

builder.AddMySqlDbContext<ExampleDbContext>(connectionName: "mysqldb");

Spropitné

Parametr connectionName se musí shodovat s názvem použitým při přidávání prostředku databáze SQL Server do hostitelského projektu aplikace. Jinými slovy, když voláte AddDatabase a zadáte název mysqldb, stejný název by měl být použit při volání AddMySqlDbContext. Další informace najdete v tématu Přidání MySQLserver prostředků a prostředků databáze.

Pro načtení objektu ExampleDbContext ze služby:

public class ExampleService(ExampleDbContext context)
{
    // Use context...
}

Další informace o injekci závislostí najdete v tématu .NET injekce závislostí.

Přidejte kontext databáze MySQL s obohacením

Pokud chcete rozšířit DbContext dalšími službami, jako jsou automatické opakování, kontroly stavu, protokolování a telemetrie, zavolejte metodu EnrichMySqlDbContext:

builder.EnrichMySqlDbContext<ExampleDbContext>(
    connectionName: "mysqldb",
    configureSettings: settings =>
    {
        settings.DisableRetry = false;
        settings.CommandTimeout = 30 // seconds
    });

Parametr settings je instance třídy PomeloEntityFrameworkCoreMySqlSettings.

Konfigurace

Integrace .NET Aspire Pomelo MySQLEntity Framework Core poskytuje několik možností konfigurace připojení k databázi na základě požadavků a konvencí projektu.

Použijte připojovací řetězec

Při použití připojovacího řetězce z oddílu konfigurace ConnectionStrings můžete při volání builder.AddMySqlDatabaseDbContext<TContext>()zadat název připojovacího řetězce:

builder.AddMySqlDatabaseDbContext<MyDbContext>("mysql");

Poté bude připojovací řetězec načten z části konfigurace ConnectionStrings.

{
  "ConnectionStrings": {
    "mysql": "Server=mysql;Database=mysqldb"
  }
}

EnrichMySqlDbContext nevyužije konfigurační sekci ConnectionStrings, protože očekává, že DbContext bude již zaregistrovaný v okamžiku volání.

Další informace naleznete v dokumentaci MySqlConnector: ConnectionString.

Použití zprostředkovatelů konfigurace

Integrace .NET Aspire Pomelo MySQLEntity Framework Core podporuje Microsoft.Extensions.Configuration. Načte PomeloEntityFrameworkCoreMySqlSettings z konfiguračních souborů, jako je appsettings.json, pomocí klíče Aspire:Pomelo:EntityFrameworkCore:MySql.

Následující příklad ukazuje appsettings.json, který konfiguruje některé z dostupných možností:

{
  "Aspire": {
    "Pomelo": {
      "EntityFrameworkCore": {
        "MySql": {
          "ConnectionString": "YOUR_CONNECTIONSTRING",
          "DisableHealthChecks": true,
          "DisableTracing": true
        }
      }
    }
  }
}

Kompletní schéma integrace MySQLJSON najdete v tématu Aspire. Pomelo.EntityFrameworkCore.MySql/ConfigurationSchema.json.

Použití vložených delegátů

Můžete také předat delegáta Action<PomeloEntityFrameworkCoreMySqlSettings> pro nastavení některých nebo všech možností přímo, například zakázat zdravotní kontrola z kódu.

builder.AddMySqlDbContext<MyDbContext>(
    "mysqldb",
    static settings => settings.DisableHealthChecks = true);

nebo

builder.EnrichMySqlDbContext<MyDbContext>(
    static settings => settings.DisableHealthChecks = true);

Kontroly stavu

Ve výchozím nastavení integrace .NET.NET Aspire umožňují kontroly stavu pro všechny služby. Další informace naleznete v přehledu integrací .NET.NET Aspire.

Integrace .NET Aspire Pomelo MySQLEntity Framework Core:

Pozorovatelnost a telemetrie

.NET .NET Aspire integrace automaticky nastaví konfigurace protokolování, trasování a metrik, které se někdy označují jako pilíře pozorovatelnosti. Další informace o pozorovatelnosti a telemetrii integrace najdete v přehledu integrace .NET.NET Aspire. V závislosti na zálohovací službě můžou některé integrace podporovat pouze některé z těchto funkcí. Například některé integrace podporují protokolování a trasování, ale ne metriky. Funkce telemetrie je také možné zakázat pomocí technik uvedených v části Konfigurace.

Protokolování

Integrace .NET Aspire Pomelo MySQLEntity Framework Core používá následující kategorie protokolů:

  • 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

Trasování

Integrace .NET Aspire Pomelo MySQLEntity Framework Core bude pomocí OpenTelemetryvysílat následující aktivity trasování:

  • MySqlConnector

Metriky

Integrace .NET Aspire Pomelo MySQLEntity Framework Core aktuálně podporuje následující metriky:

  • 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

Viz také