integracja .NET AspireMySQLEntity Framework Core Pomelo
obejmuje:integracja hostingu i Client integracja
MySQL to system zarządzania relacyjnymi bazami danych typu open source (RDBMS), który używa języka Structured Query Language (SQL) do zarządzania danymi i manipulowania nimi. Jest ona stosowana w wielu różnych środowiskach, od małych projektów po systemy przedsiębiorstwa na dużą skalę i jest popularnym wyborem do hostowania danych, które stanowią podstawę mikrousług w aplikacji natywnej dla chmury. Integracja .NET Aspire Pomelo MySQLEntity Framework Core umożliwia łączenie się z istniejącymi bazami danych MySQL lub tworzenie nowych instancji z .NET przy użyciu obrazu mysql
kontenera.
Integracja hostingu
Modelowanie hostingu MySQL przedstawia integrację server jako typ MySqlServerResource, a bazę danych jako typ MySqlDatabaseResource. Aby uzyskać dostęp do tych typów i interfejsów API, dodaj 📦Aspire.Hosting.MySql pakiet NuGet w projekcie hosta aplikacji .
dotnet add package Aspire.Hosting.MySql
Aby uzyskać więcej informacji, zobacz dotnet add package lub Zarządzaj zależnościami pakietów w .NET aplikacjach.
Dodawanie zasobu MySQLserver i zasobu bazy danych
W projekcie hosta aplikacji wywołaj AddMySql, aby dodać i zwrócić narzędzie do budowy zasobów MySQL. Połącz wywołanie zwróconego konstruktora zasobów z AddDatabase, aby dodać zasób bazy danych 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...
Notatka
Kontener SQL Server wolno się uruchamia, więc najlepiej użyć trwałego cyklu życia , aby uniknąć niepotrzebnych ponownych uruchomień. Aby uzyskać więcej informacji, zobacz okres istnienia zasobu kontenera.
Gdy .NET.NET Aspire dodaje obraz kontenera do hosta aplikacji, jak pokazano w poprzednim przykładzie z obrazem mysql
, tworzy nowe wystąpienie MySQL na komputerze lokalnym. Odwołanie do konstruktora zasobów MySQL (zmiennej mysql
) służy do dodawania bazy danych. Baza danych nosi nazwę mysqldb
, a następnie jest dodawana do ExampleProject
. Zasób MySQL zawiera poświadczenia domyślne z wartościami username
root
i losową wartość password
wygenerowaną przy użyciu metody CreateDefaultPasswordParameter.
Po uruchomieniu hosta aplikacji hasło jest przechowywane w magazynie tajnym hosta aplikacji. Jest on dodawany do sekcji Parameters
, na przykład:
{
"Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}
Nazwa parametru jest mysql-password
, ale naprawdę wystarczy sformatować nazwę zasobu z sufiksem -password
. Aby uzyskać więcej informacji, zobacz Bezpieczne przechowywanie danych uwierzytelniających aplikacji w trakcie programowania w ASP.NET Core oraz dodaj zasób MySQL z parametrami.
Metoda WithReference konfiguruje połączenie w ExampleProject
o nazwie mysqldb
.
Napiwek
Jeśli wolisz nawiązać połączenie z istniejącym MySQLserver, wywołaj AddConnectionString zamiast tego. Aby uzyskać więcej informacji, zobacz Odwołanie do istniejących zasobów.
Dodawanie zasobu MySQL z woluminem danych
Aby dodać wolumin danych do zasobu SQL Server, wywołaj metodę WithDataVolume w zasobie 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...
Wolumen danych jest wykorzystywany do utrwalania MySQLserver danych poza cyklem życia kontenera. Wolumin danych jest instalowany w ścieżce /var/lib/mysql
w kontenerze SQL Server, a gdy nie podano parametru name
, nazwa jest generowana losowo. Aby uzyskać więcej informacji na temat objętości danych i szczegółów na temat tego, dlaczego są preferowane nad wiązania, zobacz dokumentację Docker: Woluminy.
Ostrzeżenie
Hasło jest przechowywane w woluminie danych. W przypadku korzystania z woluminu danych i zmiany hasła nie będzie działać, dopóki wolumin nie zostanie usunięty.
Dodaj zasób MySQL z zamontowaniem danych za pomocą powiązania
Aby doczepić punkt montowania danych do zasobu MySQL, wywołaj metodę 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...
Ważny
Instalacje typu bind mount danych mają ograniczoną funkcjonalność w porównaniu z woluminami , które oferują lepszą wydajność, przenośność i bezpieczeństwo, czyniąc je bardziej odpowiednimi do środowisk produkcyjnych. Jednak montowanie wiązane umożliwia bezpośredni dostęp i modyfikację plików w systemie hosta, co jest idealne do opracowywania oprogramowania i testowania, gdzie potrzebne są zmiany w czasie rzeczywistym.
Instalacje powiązania danych polegają na systemie plików maszyny hosta w celu utrwalania MySQL danych między ponownymi uruchomieniami kontenera. Powiązanie danych montowane jest w ścieżce C:\MySql\Data
w systemie Windows (lub /MySql/Data
w ścieżce Unix) na maszynie hosta w kontenerze MySQL. Aby uzyskać więcej informacji na temat montowania powiązań danych, zobacz Docker dokumentację: Bind mounts.
Dodawanie zasobu MySQL z parametrami
Jeśli chcesz jawnie podać hasło głównego MySQL, możesz przekazać je jako parametr. Rozważmy następujący przykład alternatywny:
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);
Aby uzyskać więcej informacji, zobacz Parametry zewnętrzne.
Dodawanie zasobu PhpMyAdmin
phpMyAdmin to popularne internetowe narzędzie administracyjne do MySQL. Służy do przeglądania i modyfikowania obiektów MySQL, takich jak bazy danych, tabele, widoki i indeksy. Aby użyć narzędzia phpMyAdmin w rozwiązaniu .NET.NET Aspire, wywołaj metodę WithPhpMyAdmin. Ta metoda dodaje nowy zasób kontenera do rozwiązania, które hostuje phpMyAdmin i łączy go z kontenerem 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...
Po uruchomieniu rozwiązania panel .NET.NET Aspire wyświetla zasoby phpMyAdmin wraz z punktem końcowym. Wybierz link do punktu końcowego, aby wyświetlić plik phpMyAdmin na nowej karcie przeglądarki.
Obsługa testów kondycji integracji
Integracja hostowania MySQL automatycznie dodaje kontrolę kondycji zasobu MySQL. Sprawdzanie stanu weryfikuje, czy MySQLserver działa i czy można nawiązać z nią połączenie.
Integracja hostingu zależy od pakietu 📦 AspNetCore.HealthChecks orazMySql Pakietu NuGet.
integracja Client
Aby rozpocząć pracę z integracją .NET Aspire Pomelo MySQL Entity Framework, zainstaluj 📦Aspire.Pomelo.EntityFrameworkCore.MySql pakiet NuGet w projekcie, który korzysta z client, czyli projektu dla aplikacji korzystającej z MySQLEntity Framework Coreclient.
dotnet add package Aspire.Pomelo.EntityFrameworkCore.MySql
Aby uzyskać więcej informacji, zobacz dotnet add package lub Zarządzaj zależnościami pakietów w aplikacjach .NET.
Dodaj kontekst bazy danych MySQL
W pliku Program.cs używającego projektu clientwywołaj metodę rozszerzenia AddMySqlDbContext na dowolnym IHostApplicationBuilder, aby zarejestrować DbContext do użycia za pomocą kontenera do wstrzykiwania zależności. Metoda przyjmuje parametr nazwy połączenia.
builder.AddMySqlDbContext<ExampleDbContext>(connectionName: "mysqldb");
Napiwek
Parametr connectionName
musi być zgodny z nazwą używaną podczas dodawania zasobu bazy danych SQL Server w projekcie hosta aplikacji. Innymi słowy, podczas wywoływania AddDatabase
i podania nazwy mysqldb
, tej samej nazwy należy użyć podczas wywoływania AddMySqlDbContext
. Aby uzyskać więcej informacji, zobacz Dodaj zasób MySQLserver oraz zasób bazy danych.
Aby pobrać obiekt ExampleDbContext
z usługi:
public class ExampleService(ExampleDbContext context)
{
// Use context...
}
Aby uzyskać więcej informacji na temat wstrzykiwania zależności, zobacz .NET wstrzykiwanie zależności.
Dodaj kontekst bazy danych MySQL z wzbogacaniem
Aby wzbogacić DbContext
o dodatkowe usługi, takie jak automatyczne ponawianie prób, kontrole kondycji, logowanie i telemetria, wywołaj metodę EnrichMySqlDbContext:
builder.EnrichMySqlDbContext<ExampleDbContext>(
connectionName: "mysqldb",
configureSettings: settings =>
{
settings.DisableRetry = false;
settings.CommandTimeout = 30 // seconds
});
Parametr settings
jest wystąpieniem klasy PomeloEntityFrameworkCoreMySqlSettings.
Konfiguracja
Integracja .NET Aspire Pomelo MySQLEntity Framework Core udostępnia wiele opcji konfigurowania połączenia bazy danych na podstawie wymagań i konwencji projektu.
Używanie parametrów połączenia
W przypadku używania parametrów połączenia z sekcji konfiguracji ConnectionStrings
można podać nazwę parametrów połączenia podczas wywoływania builder.AddMySqlDatabaseDbContext<TContext>()
:
builder.AddMySqlDatabaseDbContext<MyDbContext>("mysql");
Następnie parametry połączenia zostaną pobrane z sekcji konfiguracji ConnectionStrings
:
{
"ConnectionStrings": {
"mysql": "Server=mysql;Database=mysqldb"
}
}
EnrichMySqlDbContext
nie będzie korzystać z sekcji konfiguracji ConnectionStrings
, ponieważ oczekuje ona zarejestrowania DbContext
w momencie jego wywołania.
Aby uzyskać więcej informacji, zobacz dokumentację MySqlConnector: ConnectionString.
Korzystanie z dostawców konfiguracji
Integracja .NET Aspire Pomelo MySQLEntity Framework Core obsługuje Microsoft.Extensions.Configuration. Ładuje PomeloEntityFrameworkCoreMySqlSettings z plików konfiguracji, takich jak appsettings.json przy użyciu klucza Aspire:Pomelo:EntityFrameworkCore:MySql
.
W poniższym przykładzie przedstawiono appsettings.json, które konfiguruje niektóre z dostępnych opcji:
{
"Aspire": {
"Pomelo": {
"EntityFrameworkCore": {
"MySql": {
"ConnectionString": "YOUR_CONNECTIONSTRING",
"DisableHealthChecks": true,
"DisableTracing": true
}
}
}
}
}
Aby zobaczyć pełny schemat integracji MySQLJSON, zobacz Aspire. Pomelo.EntityFrameworkCore.MySql/ConfigurationSchema.json.
Użyj delegatów wbudowanych
Możesz również przekazać delegata Action<PomeloEntityFrameworkCoreMySqlSettings>
, aby skonfigurować niektóre lub wszystkie opcje wbudowane, na przykład w celu wyłączenia kontroli kondycji z kodu:
builder.AddMySqlDbContext<MyDbContext>(
"mysqldb",
static settings => settings.DisableHealthChecks = true);
lub
builder.EnrichMySqlDbContext<MyDbContext>(
static settings => settings.DisableHealthChecks = true);
Kontrole kondycji
Domyślnie .NET.NET Aspire integracje przeprowadzają kontrole stanu dla wszystkich usług. Aby uzyskać więcej informacji, zobacz omówienie integracji .NET.NET Aspire.
Integracja .NET Aspire Pomelo MySQLEntity Framework Core:
- Dodaje sprawdzanie kondycji, gdy PomeloEntityFrameworkCoreMySqlSettings.DisableHealthChecks jest
false
, co wywołuje metodę CanConnectAsync należącą do EF Core. - Integruje się z punktem końcowym HTTP
/health
, który określa, że wszystkie zarejestrowane kontrole kondycji muszą przejść pomyślnie, aby aplikacja została uznana za gotową do akceptowania ruchu.
Obserwowanie i telemetria
.NET
.NET Aspire integracje automatycznie konfigurują konfiguracje rejestrowania, śledzenia i metryk, które są czasami nazywane filarami obserwowalności. Aby uzyskać więcej informacji na temat możliwości obserwacji integracji i telemetrii, zobacz omówienie integracji .NET.NET Aspire. W zależności od usługi pomocniczej niektóre integracje mogą obsługiwać tylko niektóre z tych funkcji. Na przykład niektóre integracje obsługują rejestrowanie i śledzenie, ale nie metryki. Funkcje telemetrii można również wyłączyć przy użyciu technik przedstawionych w sekcji konfiguracji
Wyrąb
Integracja .NET Aspire Pomelo MySQLEntity Framework Core korzysta z następujących kategorii logów:
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
Śledzenie
Integracja .NET Aspire Pomelo MySQLEntity Framework Core będzie emitować następujące działania śledzenia przy użyciu OpenTelemetry:
MySqlConnector
Metryki
Integracja .NET Aspire Pomelo MySQLEntity Framework Core obecnie obsługuje następujące metryki:
- 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