コード例 #1
0
        private void PrepareDatabaseMigrations(DbMigrator migrator, EFMigrationDetails migrationDetails)
        {
            var databaseMigrations = migrator.GetDatabaseMigrations().Select(v => new SelectListItem
            {
                Text  = EFMigrationDetails.GetDisplayName(v),
                Value = v
            }).ToList();

            SelectListItem disabledItem = new SelectListItem
            {
                Text     = "--------------------------------------",
                Value    = "",
                Disabled = true,
            };

            if (databaseMigrations.Any())
            {
                databaseMigrations = databaseMigrations.Skip(1).ToList();
                if (databaseMigrations.Any())
                {
                    databaseMigrations.Add(disabledItem);
                }
                databaseMigrations.Add(new SelectListItem
                {
                    Text  = "<<Remove All Migrations>>",
                    Value = "0"
                });
            }


            migrationDetails.Migrations = new SelectList(databaseMigrations, "Value", "Text", databaseMigrations.FirstOrDefault(m => !m.Disabled), new List <string> {
                disabledItem.Value
            });
            migrationDetails.TargetMigration = databaseMigrations.Where(m => !m.Disabled).Select(si => si.Value).FirstOrDefault();
        }
コード例 #2
0
        private void PreparePendingMigrations(DbMigrator migrator, EFMigrationDetails migrationDetails)
        {
            var migrations        = migrator.GetPendingMigrations().ToList();
            var pendingMigrations = migrations.Select(v => new SelectListItem
            {
                Text  = EFMigrationDetails.GetDisplayName(v, string.Compare(migrations.LastOrDefault(), v, true) == 0),
                Value = v
            });

            migrationDetails.Migrations      = new SelectList(pendingMigrations, "Value", "Text", pendingMigrations.LastOrDefault());
            migrationDetails.TargetMigration = pendingMigrations.Select(si => si.Value).LastOrDefault();
        }
コード例 #3
0
        public virtual EFMigrationDetails LoadMigrationDetails(bool isRollback)
        {
            EFMigrationDetails result = new EFMigrationDetails(isRollback);
            var migrator = CreateDBMigrator();

            result.CurrentMigration = migrator.GetDatabaseMigrations().FirstOrDefault() ?? "N/A";
            if (isRollback)
            {
                PrepareDatabaseMigrations(migrator, result);
            }
            else
            {
                PreparePendingMigrations(migrator, result);
            }

            return(result);
        }
        public ActionResult Publish(EFMigrationDetails entity)
        {
            var _service = new EFMigrationService();

            if (!_service.IsAuthorizedUser())
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden));
            }
            if (entity == null || string.IsNullOrWhiteSpace(entity.TargetMigration))
            {
                throw new System.ArgumentException("Invalid Parameters...");
            }

            _service.Update(entity.TargetMigration);

            TempData["StatusMessage"] = entity.IsRollback ? "Database restored successfully." : "Database updated successfully.";
            return(RedirectToAction("Publish", new { isRollback = entity.IsRollback }));
        }