Rystem.RepositoryFramework allows you to use correctly concepts like repository pattern, CQRS and DDD. You have interfaces for your domains, auto-generated api, auto-generated HttpClient to simplify connection "api to front-end", a functionality for auto-population in memory of your models, a functionality to simulate exceptions and waiting time from external sources to improve your implementation/business test and load test.
$ dotnet add package Rystem.RepositoryFramework.MigrationToolsYou need to create a base model as a bridge for your migration. After that you can use the two repositories with repository pattern to help yourself with the migration from a old storage to a brand new storage.
For instance you can create an in memory repository and after you add a migration source repository in this way
.AddRepositoryInMemoryStorage<MigrationUser, string>()
.ToServiceCollection()
.AddMigrationSource<MigrationUser, string, MigrationFrom>(x => x.NumberOfConcurrentInserts = 2)
Now you may use the interface in DI
IMigrationManager<MigrationUser, string> migrationService
and let the sorcery happen
var migrationResult = await _migrationService.MigrateAsync(x => x.Id!, true);