RShared.Orm.PostgreSql
10.0.4
dotnet add package RShared.Orm.PostgreSql --version 10.0.4
NuGet\Install-Package RShared.Orm.PostgreSql -Version 10.0.4
<PackageReference Include="RShared.Orm.PostgreSql" Version="10.0.4" />
<PackageVersion Include="RShared.Orm.PostgreSql" Version="10.0.4" />
<PackageReference Include="RShared.Orm.PostgreSql" />
paket add RShared.Orm.PostgreSql --version 10.0.4
#r "nuget: RShared.Orm.PostgreSql, 10.0.4"
#:package RShared.Orm.PostgreSql@10.0.4
#addin nuget:?package=RShared.Orm.PostgreSql&version=10.0.4
#tool nuget:?package=RShared.Orm.PostgreSql&version=10.0.4
RShared.Orm.PostgreSql
Коннектор стека RShared.Orm.EntityFrameworkCore к PostgreSQL: провайдер Npgsql, общий пул соединений, snake_case-нейминг — подключение хоста одной строкой.
Что делает
UseNpgsql+ общийNpgsqlDataSource: пул один на процесс, шарится всеми контекстами (изConnectionStringстроится автоматически, либо передаётся готовый черезDataSource);- snake_case таблиц и колонок через
EFCore.NamingConventions— включён по умолчанию, отключаетсяUseSnakeCaseNaming = false; - регистрация контекстов + фабрики репозиториев (
AddEntityRepositories) одним вызовом; - готовый
NpgsqlDataSourceпопадает в DI — для сырых запросов поверх того же пула.
Подключение
builder.Services.AddPostgreSqlRepositories(
options => options.ConnectionString = builder.Configuration.GetConnectionString("Database"),
typeof(CatalogContext), typeof(BillingContext));
Все контексты получают один data source и общие настройки. После этого доступен весь стек: IEntityRepositoryFactory, CreateUnitOfWork, ambient unit of work — см. README RShared.Orm.EntityFrameworkCore.
Один контекст без репозиториев или со своими настройками:
builder.Services.AddPostgreSqlContext<CatalogContext>(options =>
{
options.ConnectionString = "...";
options.ConfigureNpgsql = npgsql => npgsql.CommandTimeout(30);
});
Готовый NpgsqlDataSource (например, со своими настройками билдера):
var dataSource = new NpgsqlDataSourceBuilder(connectionString).Build();
builder.Services.AddPostgreSqlRepositories(
options => options.DataSource = dataSource,
typeof(CatalogContext));
Секреты
Библиотека ничего не знает про секрет-хранилища (Vault, Key Vault и т.п.) — поставка секретов целиком на стороне приложения, либа получает уже готовые значения:
- статический секрет (переменная окружения, файл от sidecar-агента, конфиг) — приложение собирает строку подключения и передаёт в
ConnectionString; - ротация / динамические креды — приложение строит
NpgsqlDataSourceсамо с колбэком пароля (NpgsqlDataSourceBuilder.UsePasswordProvider— Vault дёргается при каждом открытии соединения) и передаёт его черезDataSource.
Второй вариант уже покрывает всё, что нужно для интеграции с хранилищами — волт-клиент внутрь пакета не потащим.
Ретраи
EnableRetryOnFailure по умолчанию выключен: ретраящая стратегия исполнения EF несовместима с явными транзакциями, а unit of work их открывает. Включай только для контекстов, которые живут без unit of work.
Способ регистрации контекста
Дефолт — Scoped (один контекст на скоуп, скоуп = единица работы). Управляется опцией:
builder.Services.AddPostgreSqlRepositories(
o =>
{
o.ConnectionString = ...;
o.Registration = ContextRegistration.Pooled; // Scoped | Pooled | Factory | PooledFactory
},
typeof(AppDbContext));
Scoped—AddDbContext, стандарт для веба с unit of work;Pooled—AddDbContextPool: тот же контракт, дешевле на горячем пути, контекст без собственного стейта;Factory—AddDbContextFactory: singleton-фабрика короткоживущих контекстов, для фоновых воркеров;PooledFactory— фабрика с пулом.
Все режимы совместимы со стеком репозиториев: реестр понимает и прямой scoped-резолв,
и IDbContextFactory<T> (контекст на скоуп, диспозит фабрика репозиториев).
Зачем отдельный пакет
Провайдер Npgsql — осознанная зависимость только для тех, кто на PostgreSQL: ядро ORM-стека остаётся провайдер-нейтральным (и не тянет Npgsql транзитивно), версия провайдера запинена в одном месте — здесь.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- EFCore.NamingConventions (>= 10.0.1)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 10.0.3)
- RShared.Orm.EntityFrameworkCore (>= 10.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.