Beispiel #1
0
        public async Task ApplyMigrationsAsync()
        {
            IEnumerable <AppDataMigration> migrations = _migrationDiscoverService.DiscoverMigrations(GetType().Assembly);
            List <Guid> ids = await _migrationRepository.GetAllAppliedMigrationIdsAsync();

            foreach (var migration in migrations)
            {
                if (ids.Contains(migration.MigrationId))
                {
                    continue;
                }

                migration.Timestamp = _dotNetProvider.DateTimeNow;

                var context = new MigrationContext
                {
                    Database       = _mongoDatabase,
                    DotNetProvider = _dotNetProvider
                };

                bool upResult = migration.Up(context);
                if (upResult)
                {
                    await _migrationRepository.AddMigrationComplete(migration);
                }
                else
                {
                    bool downResult = migration.Down(context);
                    if (!downResult)
                    {
                        throw new InvalidOperationException("can you do anything correct?");
                    }
                }
            }
        }