Excalibur.Data.IdentityMap.SqlServer
10.0.0-alpha.15
dotnet add package Excalibur.Data.IdentityMap.SqlServer --version 10.0.0-alpha.15
NuGet\Install-Package Excalibur.Data.IdentityMap.SqlServer -Version 10.0.0-alpha.15
<PackageReference Include="Excalibur.Data.IdentityMap.SqlServer" Version="10.0.0-alpha.15" />
<PackageVersion Include="Excalibur.Data.IdentityMap.SqlServer" Version="10.0.0-alpha.15" />
<PackageReference Include="Excalibur.Data.IdentityMap.SqlServer" />
paket add Excalibur.Data.IdentityMap.SqlServer --version 10.0.0-alpha.15
#r "nuget: Excalibur.Data.IdentityMap.SqlServer, 10.0.0-alpha.15"
#:package Excalibur.Data.IdentityMap.SqlServer@10.0.0-alpha.15
#addin nuget:?package=Excalibur.Data.IdentityMap.SqlServer&version=10.0.0-alpha.15&prerelease
#tool nuget:?package=Excalibur.Data.IdentityMap.SqlServer&version=10.0.0-alpha.15&prerelease
Excalibur.Data.IdentityMap.SqlServer
SQL Server implementation of the Excalibur aggregate identity map store.
Setup
1. Create the table
CREATE TABLE [dbo].[IdentityMap] (
ExternalSystem NVARCHAR(128) NOT NULL,
ExternalId NVARCHAR(256) NOT NULL,
AggregateType NVARCHAR(256) NOT NULL,
AggregateId NVARCHAR(256) NOT NULL,
CreatedAt DATETIMEOFFSET NOT NULL CONSTRAINT DF_IdentityMap_CreatedAt DEFAULT SYSUTCDATETIME(),
UpdatedAt DATETIMEOFFSET NOT NULL CONSTRAINT DF_IdentityMap_UpdatedAt DEFAULT SYSUTCDATETIME(),
-- NONCLUSTERED is required, not a preference: this triple is 1280 bytes, past SQL Server's
-- 900-byte CLUSTERED key cap and inside the 1700-byte NONCLUSTERED one. Declared CLUSTERED,
-- the table is created with only a warning and then rejects any row whose key exceeds 900
-- bytes -- so a long external id fails on first write rather than at deployment.
CONSTRAINT PK_IdentityMap PRIMARY KEY NONCLUSTERED (ExternalSystem, ExternalId, AggregateType),
INDEX CIX_IdentityMap_External CLUSTERED (ExternalSystem, ExternalId),
INDEX IX_IdentityMap_AggregateId (AggregateType, AggregateId)
);
2. Register the provider
services.AddIdentityMap(identity =>
{
identity.UseSqlServer(sql =>
{
sql.ConnectionString(connectionString)
.SchemaName("dbo")
.TableName("IdentityMap");
});
});
Features
- No TVPs required -- batch lookups use parameterized IN clauses
- Configurable batch size -- default 100, automatically chunks larger batches
- MERGE-based upsert -- atomic bind operations
- Conflict detection -- TryBind detects duplicate key violations and returns existing mappings
License
This project is multi-licensed under:
See LICENSE for details.
Database schema
This package does not create its tables. The DDL ships inside the .nupkg under scripts/, and
you apply it — so a schema change to your database is always something you did deliberately, never
something a version upgrade did to you while you were not looking.
| Script |
|---|
scripts/CreateIdentityMapTable.sql |
Apply them in filename order before starting the application, and again — for any new ones — before starting a new version after an upgrade.
The scripts/ folder lives inside the package, not in your build output. To read it:
# the package folder, then the scripts inside it
dotnet nuget locals global-packages --list
ls ~/.nuget/packages/excalibur.data.identitymap.sqlserver/<version>/scripts/
The folder is authoritative. If any list of scripts — including this one — disagrees with what is actually in the package you installed, the package is right.
| 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
- AspNetCore.HealthChecks.SqlServer (>= 9.0.0)
- Ben.Demystifier (>= 0.4.1)
- CloudNative.CloudEvents (>= 2.8.0)
- CloudNative.CloudEvents.SystemTextJson (>= 2.8.0)
- Cronos (>= 0.12.0)
- Dapper (>= 2.1.72)
- Excalibur.Data.IdentityMap (>= 10.0.0-alpha.15)
- FluentValidation (>= 12.1.1)
- FluentValidation.DependencyInjectionExtensions (>= 12.1.1)
- IdentityModel (>= 7.0.0)
- JsonNet.ContractResolvers (>= 2.0.0)
- Medo.Uuid7 (>= 3.2.0)
- MemoryPack (>= 1.21.4)
- Microsoft.Data.SqlClient (>= 7.0.0)
- Microsoft.Extensions.Caching.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Caching.Memory (>= 10.0.10)
- Microsoft.Extensions.Configuration (>= 10.0.10)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.10)
- Microsoft.Extensions.Configuration.CommandLine (>= 10.0.10)
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 10.0.10)
- Microsoft.Extensions.Configuration.Json (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 10.0.10)
- Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Hosting (>= 10.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Http (>= 10.0.10)
- Microsoft.Extensions.Logging (>= 10.0.10)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Logging.Console (>= 10.0.10)
- Microsoft.Extensions.ObjectPool (>= 10.0.10)
- Microsoft.Extensions.Options (>= 10.0.10)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.10)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.10)
- Microsoft.IdentityModel.Tokens (>= 8.17.0)
- Polly (>= 8.6.6)
- System.IdentityModel.Tokens.Jwt (>= 8.17.0)
- System.Threading.RateLimiting (>= 10.0.7)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.0-alpha.15 | 49 | 10/11/2026 |
| 10.0.0-alpha.14 | 52 | 10/2/2026 |
| 10.0.0-alpha.13 | 60 | 9/29/2026 |
| 10.0.0-alpha.12 | 68 | 9/25/2026 |
| 10.0.0-alpha.11 | 66 | 9/15/2026 |
| 10.0.0-alpha.10 | 81 | 9/6/2026 |
| 10.0.0-alpha.9 | 76 | 8/31/2026 |
| 10.0.0-alpha.8 | 88 | 8/14/2026 |
| 10.0.0-alpha.7 | 86 | 8/13/2026 |
| 10.0.0-alpha.6 | 88 | 8/11/2026 |
| 10.0.0-alpha.5 | 80 | 8/10/2026 |
| 10.0.0-alpha.4 | 78 | 8/10/2026 |
| 3.0.0-alpha.216 | 90 | 6/30/2026 |
| 3.0.0-alpha.215 | 84 | 6/23/2026 |
| 3.0.0-alpha.214 | 89 | 6/23/2026 |
| 3.0.0-alpha.208 | 83 | 6/11/2026 |
| 3.0.0-alpha.207 | 77 | 6/11/2026 |
| 3.0.0-alpha.205 | 78 | 6/10/2026 |
| 3.0.0-alpha.204 | 84 | 6/8/2026 |
| 3.0.0-alpha.203 | 77 | 6/8/2026 |
Release notes and versioning policy: https://docs.excalibur-dispatch.dev/docs/migration/version-upgrades