Lyo.PackageMetadata.Postgres
2.0.1
dotnet add package Lyo.PackageMetadata.Postgres --version 2.0.1
NuGet\Install-Package Lyo.PackageMetadata.Postgres -Version 2.0.1
<PackageReference Include="Lyo.PackageMetadata.Postgres" Version="2.0.1" />
<PackageVersion Include="Lyo.PackageMetadata.Postgres" Version="2.0.1" />
<PackageReference Include="Lyo.PackageMetadata.Postgres" />
paket add Lyo.PackageMetadata.Postgres --version 2.0.1
#r "nuget: Lyo.PackageMetadata.Postgres, 2.0.1"
#:package Lyo.PackageMetadata.Postgres@2.0.1
#addin nuget:?package=Lyo.PackageMetadata.Postgres&version=2.0.1
#tool nuget:?package=Lyo.PackageMetadata.Postgres&version=2.0.1
Lyo.PackageMetadata.Postgres
EF Core store behind Lyo.PackageMetadata.IPackageMetadataStore.
What problem this solves
Stripped namespaces and assembly-qualified tokens show up in stack traces. Lyo.PackageMetadata resolves which NuGet or Git package owns a prefix for diagnostics overlays. PostgresPackageMetadataStore implements the store against normalized tables (PackageStackPrefix rows ordered by NormalizedPrefix length) so resolution is O(sorted prefixes) in-process after each DB read. The bulk API loads all prefixes once per call when caching allows.
How storage is modeled (conceptual)
PackageMetadataEntityholds catalog metadata (id, package name, version range, SPDX/license expression blobs). See EF configurations for the rest.PackageStackPrefixEntitymapsNormalizedPrefixto the owning package. Longest prefix wins.
Bulk resolution (TryGetManyForStrippedMethodPrefixesAsync)
- Input: distinct stripped prefixes (typically one per decoded stack frame subtree).
- Output: a dictionary with one entry per input key; the value is
nullwhen nothing matches contract rules. - Requested keys are never dropped silently. That invariant keeps
Lyo.Diagnosticbulk decode paths deterministic.
Caching the prefix catalog (PostgresPrefixCatalogCachingMode)
Repeated DB chatter is gated by PostgresPackageMetadataOptions.PrefixCatalogCaching:
| Mode | What it means |
|---|---|
InvalidateOnRegisterManyOrClear |
Keep an immutable in-process snapshot. Reload when mutations bump the generation counter (RegisterManyAsync or ClearPrefixCatalogCache on the same instance). |
Disabled |
Always hit Postgres. Wrap with an outer cache yourself if importing huge catalogs asynchronously. |
When caching is disabled, ClearPrefixCatalogCache() is a no-op on the cache. It only bumps the generation.
Cross-process writes do not invalidate. Disable the snapshot or bust the cache after CLI imports.
DI registration (Extensions)
- AddPackageMetadataDbContextFactory (and
FromConfiguration). BindsPostgresPackageMetadataOptions, registers thePackageMetadataDbContextfactory, attachesAddPostgresMigrationsbootstrap. - AddPostgresPackageMetadataStore. Factory plus
IPackageMetadataStoreasPostgresPackageMetadataStoresingleton resolving options andIDbContextFactory.
Schema and migrations
Migrations live under Migrations/. Table names and schema follow PostgresPackageMetadataOptions.Schema. Inspect the snapshot for authoritative DDL.
Related reading
- Stack decode and breadcrumb tooling that optionally consumes
IPackageMetadataStore:Lyo.Diagnostic.
Dependencies
Generated from ProjectReference / PackageReference (same model as docs/Lyo.ProjectGraph.html).
Lyo.Exceptions(direct, lyo)Lyo.PackageMetadata(direct, lyo)Lyo.Postgres(direct, lyo)Microsoft.EntityFrameworkCore10.0.5(direct, microsoft)Microsoft.EntityFrameworkCore.Design10.0.5(direct, microsoft)Microsoft.Extensions.Options10.0.5(direct, microsoft)Lyo.Common.Core(transitive, lyo)Lyo.Common.Metadata(transitive, lyo)Lyo.Hashing(transitive, lyo)Lyo.Health(transitive, lyo)Microsoft.Bcl.AsyncInterfaces10.0.5(transitive, microsoft, netstandard2.0)Microsoft.EntityFrameworkCore.Relational10.0.5(transitive, microsoft)Microsoft.Extensions.DependencyInjection.Abstractions10.0.5(transitive, microsoft)Microsoft.Extensions.Hosting.Abstractions10.0.5(transitive, microsoft)Npgsql.EntityFrameworkCore.PostgreSQL10.0.3(transitive, third-party)System.IO.Hashing10.0.5(transitive, microsoft, net10.0)System.Memory4.6.3(transitive, microsoft, netstandard2.0)System.Text.Json10.0.5(transitive, microsoft, netstandard2.0)System.Threading.Tasks.Extensions4.6.3(transitive, microsoft)
| 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
- Lyo.Exceptions (>= 2.0.0)
- Lyo.PackageMetadata (>= 2.0.0)
- Lyo.Postgres (>= 2.0.0)
- Microsoft.EntityFrameworkCore (>= 10.0.5)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.5)
- Microsoft.Extensions.Options (>= 10.0.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.