private async Task <MigrationPlan <TMigrationVersion, TMigrationInfo> > GetPlanForNonAppliedMigrationsInternal(Assembly[] assembliesContainingMigrations,
                                                                                                                       CancellationToken cancellationToken)
        {
            await using var session = await SessionFactory.CreateSessionForRetrievingAllMigrationInfosAsync(cancellationToken);

            var appliedMigrationInfos = await session.GetAllMigrationInfosAsync(cancellationToken);

            var(infoWithHighestVersion, allVersions) = appliedMigrationInfos.ExtractMigrationVersions <TMigrationInfo, TMigrationVersion>();
            var migrationToBeApplied = assembliesContainingMigrations.DetermineNonAppliedMigrations <TMigrationVersion, TMigration, TMigrationAttribute>(allVersions);

            return(new MigrationPlan <TMigrationVersion, TMigrationInfo>(infoWithHighestVersion, migrationToBeApplied));
        }