Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í
Integrace hostování MySQL modeluje server jako typ MySqlServerResource a databázi 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řidání prostředku serveru MySQL a databázového prostředku
V projektu hostitele aplikace zavolejte AddMySql, abyste přidali a poté vrátili tvůrce zdrojů 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 pomalu spustí, takže je nejlepší použít trvalou životnost, abyste se vyhnuli zbytečným restartům. Další informace najdete v Životnosti 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 zdrojů 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 username
root
a náhodně vygenerovaný password
pomocí metody CreateDefaultPasswordParameter.
Když se hostitel aplikace spustí, heslo se uloží do tajného úložiště 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
.
Návod
Pokud byste se raději připojili k existujícímu serveru MySQL, volejte místo toho AddConnectionString. Další informace najdete v tématu Odkazování na existující prostředky.
Přidejte MySQL zdroj 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...
Datový svazek slouží k zachování dat serveru MySQL 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 připojeními typu bind, najdete v Docker dokumentaci: Svazky.
Výstraha
Heslo je uloženo v datovém svazku. Pokud používáte datový svazek a heslo se změní, nebude to fungovat, dokud svazek neodstraníte.
Důležité
Některé integrace databází, včetně .NET AspireMySQL integrace, nemohou úspěšně používat datové svazky po nasazení na Azure Container Apps (ACA). Důvodem je to, že ACA používá Server k připojení kontejnerů ke svazkům dat protokol SMB (Message Block) a některé systémy toto připojení nemůžou používat. Na řídicím panelu Aspire má databáze ovlivněná tímto problémem stav Aktivace nebo Selhání aktivace , ale nikdy není uvedená jako Spuštěná.
Problém můžete vyřešit nasazením do clusteru Kubernetes, například pomocí služeb AzureKubernetes (AKS). Další informace viz nasazení .NET.NET Aspire.
Přidejte prostředek MySQL s datovým úchytem
Chcete-li přidat datové připojení 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é
Vazby dat mají v porovnání s volumy omezené funkce; volumy nabízejí lepší výkon, přenositelnost a zabezpečení, což je činí vhodnějšími pro produkční prostředí. Nicméně bind mounty umožňují přímý přístup a úpravy souborů na hostitelském systému, což je vhodné pro vývoj a testování, kde jsou potřeba změny v reálném čase.
Datové bind mounty využívají systém souborů hostitelského počítače k zachování MySQL dat při restartování kontejneru. Datový připojovací bod je připojen k cestě C:\MySql\Data
ve Windows (nebo k /MySql/Data
na Unix) na hostitelském počítači v kontejneru MySQL. Další informace o datových připojeních pomocí bind mounts najdete v dokumentaci Docker: Datová připojení pomocí bind mounts.
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, jestli je server MySQL spuštěný a že se k němu dá navázat připojení.
Integrace hostování spoléhá na balíček NuGet 📦 AspNetCore.HealthChecks.MySql.
Client integrace
Pokud chcete začít s integrací .NET Aspire Pomelo MySQL Entity Framework, nainstalujte NuGet 📦Aspire.Pomelo.EntityFrameworkCore.MySql balíček do projektu spotřebovávajícího klienta, tj. projektu aplikace, která používá MySQLEntity Framework Core klienta.
dotnet add package Aspire.Pomelo.EntityFrameworkCore.MySql
Další informace najdete v tématu dotnet add package nebo Správa závislostí balíčků v aplikacích .NET.
Přidejte kontext databáze MySQL
Program.cs V souboru projektu, který využívá klienta, zavolejte metodu AddMySqlDbContext rozšíření na libovolnouIHostApplicationBuilder, která zaregistruje DbContext použití prostřednictvím kontejneru injektáže závislostí. Metoda přebírá parametr názvu připojení.
builder.AddMySqlDbContext<ExampleDbContext>(connectionName: "mysqldb");
Návod
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 jméno mysqldb
, měli byste totožné jméno použít i při volání AddMySqlDbContext
. Další informace najdete v tématu Přidání prostředku serveru MySQL a databázového prostředku.
Načtení ExampleDbContext
objektu ze služby:
public class ExampleService(ExampleDbContext context)
{
// Use context...
}
Další informace o injektáži závislostí najdete v tématu .NET Injektáž závislostí.
Rozšíření kontextu databáze MySQL
Pokud chcete získat kontext databáze a přidat ji do kontejneru injektáže závislostí, můžete raději použít standardní metodu Entity Framework:
builder.Services.AddDbContext<ExampleDbContext>(options =>
options.UseMySql(builder.Configuration.GetConnectionString("mysqldb")
?? throw new InvalidOperationException("Connection string 'mysqldb' not found.")));
Poznámka:
Název připojovacího řetězce, který předáte metodě GetConnectionString, se musí shodovat s názvem použitým při přidávání prostředku MySQL do hostitelského projektu aplikace. Další informace najdete v tématu Přidání prostředku serveru MySQL a databázového prostředku.
Při vytváření kontextu databáze tímto způsobem máte větší flexibilitu, například:
- Existující konfigurační kód pro kontext databáze můžete znovu použít, aniž byste ho museli přepisovat pro .NET.NET Aspire.
- Můžete použít Entity Framework Core zachytávače k úpravě databázových operací.
- Můžete se rozhodnout, že nebudete používat Entity Framework Core sdružování kontextu, což může za určitých okolností fungovat lépe.
Pokud použijete tuto metodu, můžete vylepšit kontext databáze pomocí opakování ve stylu .NET.NET Aspire, kontrol stavu, protokolování a funkcí telemetrie voláním metody EnrichMySqlDbContext.
builder.EnrichMySqlDbContext<ExampleDbContext>(
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í MySQL schéma integrace JSON naleznete zde: 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);
Client testy stavu integrace
Ve výchozím nastavení mají .NET.NET Aspireklientské integracekontroly stavu povoleny pro všechny služby. Podobně mnoho .NET.NET Aspirehostovacích integrací také povoluje koncové body kontroly stavu. Další informace najdete tady:
Integrace .NET Aspire Pomelo MySQLEntity Framework Core:
- Přidá kontrolu stavu, když je PomeloEntityFrameworkCoreMySqlSettings.DisableHealthChecks
false
, což volá metodu EF Core z CanConnectAsync. - Integruje se s HTTP koncovým bodem
/health
, který stanovuje, že všechny registrované kontroly stavu musí být úspěšné, aby byla aplikace považována za připravenou přijímat provoz.
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é
- MySQL databáze
-
docs - integrace .NET.NET Aspire
- .NET Aspire GitHub úložiště