SharpCoreDB.Provider.Sync is the Dotmim.Sync provider for SharpCoreDB.
It enables bidirectional synchronization between SharpCoreDB and Dotmim.Sync-supported providers such as SQL Server, PostgreSQL, MySQL, and SQLite.
- Phase 4 (Testing & Integration): ✅ Complete
- Sync provider test suite: ✅ 84/84 passing
- Target:
.NET 10,C# 14
SharpCoreDBSyncProviderimplements Dotmim.SyncCoreProvider- Works as client and server provider (
CanBeServerProvider = true) - Connection via
SharpCoreDB.Data.Provider(SharpCoreDBConnection)
SharpCoreDBSyncAdapter supports:
SelectChangesSelectRowInsertRowUpdateRowDeleteRowSelectMetadataUpdateMetadataDeleteMetadata- Batch execution (
ExecuteBatchCommandAsync)
- Shadow tracking table per sync table:
{table}_tracking - Tracking columns:
- primary key column (mirrored)
update_scope_idtimestampsync_row_is_tombstonelast_change_datetime
- Timestamp index for delta queries
- Trigger DDL generation for INSERT/UPDATE/DELETE
- Programmatic fallback for engines without trigger support via
RecordChangeAsync
SharpCoreDBScopeInfoBuilder provisions and manages:
scope_infoscope_info_client
Includes full CRUD command generation for both tables plus SYNC_TIMESTAMP() support.
SharpCoreDBDbMetadata provides:
DataType -> DbTypeDbType -> DataTypeDbType -> CLR TypeDataType -> CLR TypeDataType -> SQL type string- Sync capability validation (
DataType.Vectorintentionally unsupported)
SyncServiceCollectionExtensions.AddSharpCoreDBSync() registers:
SyncProviderOptionsSyncProviderFactorySharpCoreDBSyncProviderSqliteDialectTrackingTableBuilderIChangeTrackingManager(ChangeTrackingManager)ITombstoneManager(TombstoneManager)
TombstoneManager supports:
- Cleanup with retention policy (
CleanTombstonesAsync) - Count retrieval (
GetTombstoneCountAsync)
SyncProviderOptions:
EnableAutoTracking(defaulttrue)TombstoneRetentionDays(default30)BatchSize(default500)AutoProvisionScopeTables(defaulttrue)CommandTimeoutSeconds(default300)
using Dotmim.Sync;
using Dotmim.Sync.SqlServer;
using SharpCoreDB.Provider.Sync;
var local = new SharpCoreDBSyncProvider(
"Path=C:\\data\\local.scdb;Password=secret",
new SyncProviderOptions());
var remote = new SqlSyncProvider("Server=sql;Database=app;Trusted_Connection=True;");
var agent = new SyncAgent(local, remote);
var result = await agent.SynchronizeAsync(["Users", "Orders", "Products"]);
Console.WriteLine($"Uploaded: {result.TotalChangesUploaded}");
Console.WriteLine($"Downloaded: {result.TotalChangesDownloaded}");Test project: tests/SharpCoreDB.Provider.Sync.Tests
ProviderInitializationTestsDependencyInjectionTestsChangeTrackingProvisioningTestsPrimaryKeyDebugTestsTypeMappingTestsScopeInfoBuilderTests
SQLiteRoundtripTestsEndToEndSyncScenariosSyncPerformanceBenchmarksSyncErrorHandlingTests
# Full provider test suite
dotnet test tests/SharpCoreDB.Provider.Sync.Tests/SharpCoreDB.Provider.Sync.Tests.csproj
# Integration only
dotnet test tests/SharpCoreDB.Provider.Sync.Tests/SharpCoreDB.Provider.Sync.Tests.csproj --filter "Integration"Phase 4 delivered complete test infrastructure, scenario coverage, performance benchmarks, and error-path validation.
The sync provider is ready for full-system validation runs and release hardening.