DbSignal.Abstractions
1.0.2
dotnet add package DbSignal.Abstractions --version 1.0.2
NuGet\Install-Package DbSignal.Abstractions -Version 1.0.2
<PackageReference Include="DbSignal.Abstractions" Version="1.0.2" />
<PackageVersion Include="DbSignal.Abstractions" Version="1.0.2" />
<PackageReference Include="DbSignal.Abstractions" />
paket add DbSignal.Abstractions --version 1.0.2
#r "nuget: DbSignal.Abstractions, 1.0.2"
#:package DbSignal.Abstractions@1.0.2
#addin nuget:?package=DbSignal.Abstractions&version=1.0.2
#tool nuget:?package=DbSignal.Abstractions&version=1.0.2
DbSignal.Abstractions
The contract. Depends on nothing.
This package defines what a change feed is. It contains no database code — reference it from a domain or contract project that must not drag a database driver along, then reference a provider package where the wiring happens.
public interface IChangeFeed : IAsyncDisposable
{
FeedCapabilities Capabilities { get; }
string ProviderName { get; }
IAsyncEnumerable<ChangeBatch> ReadAsync(Checkpoint from, CancellationToken ct = default);
}
Capabilities, not lies
Databases are not equally good at reporting change. SQLite can only say "something in this file changed"; SQL Server names the individual rows and whether each was an insert, update or delete. A uniform API over that would have to either lie about SQLite or cripple the others down to its floor.
So every feed declares what it can actually do:
public sealed record FeedCapabilities(
ChangeDetail Detail, // DatabaseChanged < TableChanged < KeysChanged < RowImages
bool DurableAcrossRestart,
bool SurvivesDowntime,
bool FiltersOwnWrites,
bool RequiresProvisioning);
and consumers declare what they need. Asking for more than a provider offers fails at startup, with a message saying why — not quietly, six months later, when someone notices half the job was never being done.
Providers
| Package | Mechanism | Detail |
|---|---|---|
DbSignal.Sqlite |
PRAGMA data_version |
DatabaseChanged |
DbSignal.SqlServer |
Change Tracking | KeysChanged |
Delivery guarantee
At-least-once. A crash between handling a batch and saving its checkpoint replays that batch, so handlers must be idempotent. Exactly-once is not achievable across these mechanisms, and claiming it would be a lie.
Targets net8.0 and netstandard2.0. MIT licensed.
Source and full documentation.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
-
net8.0
- No dependencies.
NuGet packages (4)
Showing the top 4 NuGet packages that depend on DbSignal.Abstractions:
| Package | Downloads |
|---|---|
|
DbSignal.SqlServer
SQL Server change detection for DbSignal, via Change Tracking. Reports which rows changed, no matter which application wrote them. No triggers, no Service Broker. |
|
|
DbSignal.Sqlite
SQLite change detection for DbSignal, via PRAGMA data_version. Detects writes made by other processes — external tools, scripts, a second application — with no schema changes and no setup. |
|
|
DbSignal.Extensions.Hosting
Dependency-injection and background-service wiring for DbSignal. Register a feed and a handler; the library owns the loop, retries and checkpointing. |
|
|
DbSignal.PostgreSql
PostgreSQL change detection for DbSignal, via logical replication. Streams the rows another application changed, with their before and after values. No triggers, no polling. |
GitHub repositories
This package is not used by any popular GitHub repositories.