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

            var latestMigrationInfo = await session.GetLatestMigrationInfoAsync(cancellationToken);

            var latestMigrationVersion = default(TMigrationVersion?);

            if (latestMigrationInfo != null)
            {
                latestMigrationVersion = latestMigrationInfo.GetMigrationVersion();
            }

            var migrationsToBeApplied = assembliesContainingMigrations.DetermineNewMigrations <TMigrationVersion, TMigration, TMigrationAttribute>(latestMigrationVersion);

            return(new MigrationPlan <TMigrationVersion, TMigrationInfo>(latestMigrationInfo, migrationsToBeApplied));
        }