integrace .NET AspirePostgreSQLEntity Framework Core
zahrnuje:integraci hostování a Client integraci
PostgreSQL je výkonný opensourcový systém relačních databází s mnoha lety aktivního vývoje, který získal silnou pověst pro spolehlivost, odolnost funkcí a výkon. Integrace
Integrace hostování
PostgreSQL hostování integračních modelů PostgreSQLserver jako typ PostgresServerResource. Přístup k tomuto typu a rozhraním API, které vám umožní jej přidat do balíčku NuGet pro hostování 📦Aspire.PostgreSQL v projektu hostitele aplikace .
-
rozhraní příkazového řádku
- PackageReference
dotnet add package Aspire.Hosting.PostgreSQL
Další informace najdete v tématu dotnet add package nebo Manage package dependencies in .NET applications.
Přidání prostředku PostgreSQLserver
V projektu hostitele aplikace zavolejte AddPostgres pro instanci builder
, abyste přidali PostgreSQLserver prostředek, a potom zavolejte AddDatabase pro instanci postgres
, abyste přidali databázový prostředek, jak je znázorněno v následujícím příkladu:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Když .NET.NET Aspire přidá do hostitele aplikace image kontejneru, jak je znázorněno v předchozím příkladu s imagí docker.io/library/postgres
, vytvoří na místním počítači novou instanci PostgreSQLserver. Odkaz na vaši PostgreSQLserver a instanci databáze PostgreSQL (proměnnou postgresdb
) slouží k přidání závislosti do ExampleProject
. Prostředek PostgreSQLserver zahrnuje výchozí přihlašovací údaje s username
"postgres"
a náhodně vygenerovanými password
pomocí metody CreateDefaultPasswordParameter.
Metoda WithReference nakonfiguruje připojení v ExampleProject
s názvem "messaging"
. Další informace naleznete v části Životní cyklus prostředků kontejneru.
Spropitné
Pokud byste se raději připojili k existujícímu PostgreSQLserver, volejte místo toho AddConnectionString. Další informace naleznete v sekci Reference k existujícím zdrojům.
Přidání prostředku PostgreSQL pgAdmin
Při přidávání PostgreSQL prostředků do builder
pomocí metody AddPostgres
můžete řetězit volání na WithPgAdmin
k přidání kontejneru dpage/pgadmin4. Tento kontejner je multiplatformní client pro PostgreSQL databáze, který obsluhuje administrátorský panel na webu. Podívejte se na následující příklad:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithPgAdmin();
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Předchozí kód přidá kontejner na základě obrazu docker.io/dpage/pgadmin4
. Kontejner slouží ke správě PostgreSQLserver a databázových prostředků. Metoda WithPgAdmin
přidá kontejner, který slouží webovému řídicímu panelu pro správu pro PostgreSQL databáze.
Přidejte prostředek pgWeb PostgreSQL
Při přidávání PostgreSQL prostředků do builder
pomocí metody AddPostgres
můžete řetězit volání na WithPgWeb
pro přidání sosedoff/pgweb kontejneru. Tento kontejner je multiplatformní client pro PostgreSQL databáze, který poskytuje webový administrační panel. Podívejte se na následující příklad:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithPgWeb();
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Předchozí kód přidá kontejner založený na obrazu docker.io/sosedoff/pgweb
. Všechny registrované PostgresDatabaseResource instance se používají k vytvoření konfiguračního souboru pro každou instanci a každá konfigurace je svázaná s adresářem záložek kontejneru pgweb. Další informace najdete v dokumentaci PgWeb: Server záložky připojení.
Přidání PostgreSQLserver prostředku s datovým svazkem
Pokud chcete do prostředku PostgreSQLserver přidat datový svazek, zavolejte metodu WithDataVolume prostředku PostgreSQLserver:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithDataVolume(isReadOnly: false);
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Objem dat se používá k zachování PostgreSQLserver dat mimo životní cyklus kontejneru. Datový svazek se připojí k cestě /var/lib/postgresql/data
v kontejneru PostgreSQLserver a pokud 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 mounts, najdete v dokumentaci Docker: Svazky.
Přidání prostředku PostgreSQLserver s připojením vazby dat
Pokud chcete přidat připojení datové vazby k prostředku PostgreSQLserver, zavolejte metodu WithDataBindMount:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithDataBindMount(
source: @"C:\PostgreSQL\Data",
isReadOnly: false);
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// 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í. Přesto přípojná místa umožňují přímý přístup a úpravy souborů na 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.
Vázání dat spoléhají na souborový systém hostitele pro uchování PostgreSQLserver dat při restartech kontejneru. Datové svazování připojení je připojeno k cestě C:\PostgreSQL\Data
na Windows (nebo /PostgreSQL/Data
na Unix) na hostitelském počítači v kontejneru PostgreSQLserver. Další informace o připojeních datových vazeb najdete v dokumentaci Docker: Připojení vazby.
Přidejte PostgreSQLserver prostředek s bind mount pro inicializaci
Pokud chcete přidat připojení inicializační vazby k prostředku PostgreSQLserver, zavolejte metodu WithInitBindMount:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithInitBindMount(@"C:\PostgreSQL\Init");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Připojení init spoléhá na systém souborů hostitelského počítače pro inicializaci PostgreSQLserver databáze pomocí složky init kontejnerů . Tato složka se používá k inicializaci a k spuštění všech spustitelných skriptů prostředí nebo souborů příkazů .sql po vytvoření složky postgres-data. Inicializační připojení je připojeno na C:\PostgreSQL\Init
ve Windows (nebo na /PostgreSQL/Init
na Unix) na hostitelském počítači v kontejneru PostgreSQLserver.
Přidejte prostředek PostgreSQLserver s parametry
Pokud chcete explicitně zadat uživatelské jméno a heslo používané imagí kontejneru, můžete tyto přihlašovací údaje zadat jako parametry. Podívejte se na následující alternativní příklad:
var builder = DistributedApplication.CreateBuilder(args);
var username = builder.AddParameter("username", secret: true);
var password = builder.AddParameter("password", secret: true);
var postgres = builder.AddPostgres("postgres", username, password);
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Další informace o poskytování parametrů naleznete v tématu Externí parametry.
Hostování kontrol stavu integrace
Integrace hostování PostgreSQL automaticky přidá kontrolu stavu prostředku PostgreSQLserver. Kontrola stavu ověřuje, že jsou spuštěny PostgreSQLserver a že se k nim dá navázat připojení.
Integrace hostování spoléhá na balíček NuGet 📦 AspNetCore.HealthChecks.Npgsql.
Client integrace
Pokud chcete začít s integrací .NET AspirePostgreSQLEntity Framework Coreclient, nainstalujte 📦Aspire. Npgsql.EntityFrameworkCore.PostgreSQL balíček NuGet v projektu client, tj. projekt pro aplikaci, která používá PostgreSQLclient. Integrace .NET AspirePostgreSQLEntity Framework Coreclient registruje požadované instance podtřídy DbContext
, které můžete použít k interakci s PostgreSQL.
dotnet add package Aspire.Npgsql.EntityFrameworkCore.PostgreSQL
Přidání kontextu databáze Npgsql
V souboru Program.cs projektu využívajícího clientzavolejte metodu rozšíření AddNpgsqlDbContext na libovolném IHostApplicationBuilder a zaregistrujte podtřídu DbContext pro použití prostřednictvím kontejneru injektáže závislostí. Metoda přebírá parametr názvu připojení.
builder.AddNpgsqlDbContext<YourDbContext>(connectionName: "postgresdb");
Spropitné
Parametr connectionName
se musí shodovat s názvem použitým při přidávání prostředku PostgreSQLserver do hostitelského projektu aplikace. Další informace najdete v tématu Přidání PostgreSQLserver prostředků.
Po přidání YourDbContext
do builderu můžete získat instanci YourDbContext
pomocí injekce závislostí. Pokud například chcete načíst objekt zdroje dat z ukázkové služby, definujte ho jako parametr konstruktoru a ujistěte se, že je třída ExampleService
zaregistrovaná v kontejneru injektáže závislostí:
public class ExampleService(YourDbContext context)
{
// Use context...
}
Další informace o injektáži závislostí najdete v tématu .NET injektáž závislostí.
Přidání kontextu databáze Npgsql s rozšířením
Pokud chcete rozšířit DbContext
dalšími službami, jako jsou automatické opakování, kontroly stavu, protokolování a telemetrie, zavolejte metodu EnrichNpgsqlDbContext:
builder.EnrichNpgsqlDbContext<YourDbContext>(
connectionName: "postgresdb",
configureSettings: settings =>
{
settings.DisableRetry = false;
settings.CommandTimeout = 30;
});
Parametr settings
je instance třídy NpgsqlEntityFrameworkCorePostgreSQLSettings.
Konfigurace
Integrace .NET AspirePostgreSQLEntity Framework Core poskytuje několik přístupů a možností konfigurace pro splnění 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
zadáte název připojovacího řetězce při volání metody AddNpgsqlDbContext:
builder.AddNpgsqlDbContext<MyDbContext>("pgdb");
Připojovací řetězec je získán z oddílu konfigurace ConnectionStrings
.
{
"ConnectionStrings": {
"pgdb": "Host=myserver;Database=test"
}
}
EnrichNpgsqlDbContext
nepoužije oddíl konfigurace ConnectionStrings
, protože očekává, že se DbContext
zaregistruje v okamžiku, kdy se volá.
Další informace naleznete v ConnectionString.
Použití zprostředkovatelů konfigurace
Integrace .NET AspirePostgreSQLEntity Framework Core podporuje Microsoft.Extensions.Configuration. Načte NpgsqlEntityFrameworkCorePostgreSQLSettings z konfiguračních souborů, jako je appsettings.json, pomocí klíče Aspire:Npgsql:EntityFrameworkCore:PostgreSQL
. Pokud jste nastavili konfigurace v oddílu Aspire:Npgsql:EntityFrameworkCore:PostgreSQL
, stačí volat metodu bez předání jakéhokoli parametru.
Následující příklad ukazuje soubor appsettings.json, který konfiguruje některé z dostupných možností:
{
"Aspire": {
"Npgsql": {
"EntityFrameworkCore": {
"PostgreSQL": {
"ConnectionString": "Host=myserver;Database=postgresdb",
"DbContextPooling": true,
"DisableHealthChecks": true,
"DisableTracing": true
}
}
}
}
}
Kompletní schéma integrace PostgreSQLEntity Framework CoreclientJSON najdete v tématu Aspire. Npgsql.EntityFrameworkCore.PostgreSQL/ConfigurationSchema.json.
Použití vložených delegátů
Můžete také předat delegáta Action<NpgsqlEntityFrameworkCorePostgreSQLSettings>
k nastavení některých nebo všech možností přímo, například k nastavení ConnectionString
:
builder.AddNpgsqlDbContext<YourDbContext>(
"pgdb",
static settings => settings.ConnectionString = "<YOUR CONNECTION STRING>");
Konfigurace více tříd DbContext
Pokud chcete zaregistrovat více DbContext s různými konfiguracemi, můžete použít název konfigurační sekce $"Aspire:Npgsql:EntityFrameworkCore:PostgreSQL:{typeof(TContext).Name}"
. Konfigurace json by vypadala takto:
{
"Aspire": {
"Npgsql": {
"EntityFrameworkCore": {
"PostgreSQL": {
"ConnectionString": "<YOUR CONNECTION STRING>",
"DbContextPooling": true,
"DisableHealthChecks": true,
"DisableTracing": true,
"AnotherDbContext": {
"ConnectionString": "<ANOTHER CONNECTION STRING>",
"DisableTracing": false
}
}
}
}
}
}
Volání metody AddNpgsqlDbContext s parametrem typu AnotherDbContext
by pak načetlo nastavení z oddílu Aspire:Npgsql:EntityFrameworkCore:PostgreSQL:AnotherDbContext
.
builder.AddNpgsqlDbContext<AnotherDbContext>();
Kontroly stavu
Integrace .NET.NET Aspire ve výchozím nastavení umožňují kontroly stavu pro všechny služby. Další informace naleznete v přehledu integrací .NET.NET Aspire.
Integrace .NET AspirePostgreSQLEntity Framework Core ve výchozím nastavení zpracovává následující:
- Přidá
DbContextHealthCheck
, která volá metodu CanConnectAsyncEF Core. Název kontroly zdraví je název typuTContext
. - Integruje se s HTTP koncovým bodem
/health
, který stanoví, že všechny registrované zdravotní kontroly musí být úspěšně dokončeny, aby byla aplikace považována za připravenou k přijetí provozu.
Pozorovatelnost a telemetrie
.NET .NET Aspire integrace automaticky nastavují 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 AspirePostgreSQLEntity 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.Infrastructure
Microsoft.EntityFrameworkCore.Migrations
Microsoft.EntityFrameworkCore.Model
Microsoft.EntityFrameworkCore.Model.Validation
Microsoft.EntityFrameworkCore.Query
Microsoft.EntityFrameworkCore.Update
Trasování
Integrace .NET AspirePostgreSQLEntity Framework Core pomocí OpenTelemetryvygeneruje následující aktivity trasování:
Npgsql
Metody měření dat
Integrace .NET AspirePostgreSQLEntity Framework Core pomocí OpenTelemetryvygeneruje následující metriky:
Microsoft.EntityFrameworkCore:
ec_Microsoft_EntityFrameworkCore_active_db_contexts
ec_Microsoft_EntityFrameworkCore_total_queries
ec_Microsoft_EntityFrameworkCore_queries_per_second
ec_Microsoft_EntityFrameworkCore_total_save_changes
ec_Microsoft_EntityFrameworkCore_save_changes_per_second
ec_Microsoft_EntityFrameworkCore_compiled_query_cache_hit_rate
ec_Microsoft_Entity_total_execution_strategy_operation_failures
ec_Microsoft_E_execution_strategy_operation_failures_per_second
ec_Microsoft_EntityFramew_total_optimistic_concurrency_failures
ec_Microsoft_EntityF_optimistic_concurrency_failures_per_second
Npgsql:
ec_Npgsql_bytes_written_per_second
ec_Npgsql_bytes_read_per_second
ec_Npgsql_commands_per_second
ec_Npgsql_total_commands
ec_Npgsql_current_commands
ec_Npgsql_failed_commands
ec_Npgsql_prepared_commands_ratio
ec_Npgsql_connection_pools
ec_Npgsql_multiplexing_average_commands_per_batch
ec_Npgsql_multiplexing_average_write_time_per_batch
integrace hostování AzurePostgreSQL
Pokud chcete nasadit prostředky PostgreSQL do Azure, nainstalujte balíček NuGet 📦Aspire.Hostování.Azure.PostgreSQL:
dotnet add package Aspire.Hosting.Azure.PostgreSQL
Přidání prostředku AzurePostgreSQLserver
Po instalaci integrace hostování .NET AspireAzurePostgreSQL volejte metodu rozšíření AddAzurePostgresFlexibleServer
v hostitelském projektu aplikace:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddAzurePostgresFlexibleServer("postgres");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
Předchozí volání AddAzurePostgresFlexibleServer
nakonfiguruje prostředek server PostgreSQL tak, aby byl nasazen jako flexibilní AzurePostgresServer.
Důležitý
Ve výchozím nastavení AddAzurePostgresFlexibleServer
konfiguruje ověřování ID Microsoft Entra . To vyžaduje změny aplikací, které se k těmto prostředkům potřebují připojit. Další informace najdete v tématu Client integrace.
Přidat autentizovaný Azure Npgsql client
Ve výchozím nastavení se při volání AddAzurePostgresFlexibleServer
v PostgreSQL integračního hostování nakonfiguruje 📦AzureIdentita balíčku NuGet pro povolení ověřování:
-
rozhraní příkazového řádku
- Odkaz na balíček
dotnet add package Azure.Identity
Připojení PostgreSQL lze využívat pomocí integrace client a Azure.Identity
:
builder.AddNpgsqlDbContext<YourDbContext>(
"postgresdb",
configureDataSourceBuilder: (dataSourceBuilder) =>
{
if (!string.IsNullOrEmpty(dataSourceBuilder.ConnectionStringBuilder.Password))
{
return;
}
dataSourceBuilder.UsePeriodicPasswordProvider(async (_, ct) =>
{
var credentials = new DefaultAzureCredential();
var token = await credentials.GetTokenAsync(
new TokenRequestContext([
"https://ossrdbms-aad.database.windows.net/.default"
]), ct);
return token.Token;
},
TimeSpan.FromHours(24),
TimeSpan.FromSeconds(10));
});
Předchozí fragment kódu ukazuje použití třídy DefaultAzureCredential z balíčku Azure.Identity k ověření pomocí Microsoft Entra ID a načtení tokenu pro připojení k databázi PostgreSQL. Metoda UsePeriodicPasswordProvider slouží k poskytnutí tokenu tvůrci připojovacích řetězců.
Viz také
- Azure Database pro dokumentaci PostgreSQL
- integrace .NET.NET Aspire
- .NET Aspire GitHub repo úložiště