public ActionResult EditProjectConfig(string projectName, string name, EditProjectConfigModel editProjectConfig)
        {
            if (null == editProjectConfig)
                return View("Error");

            // Validate id (the ProjectConfig.Id to be edited)
            var id = editProjectConfig.Id;
            if (id < 1)
                return View("Error");

            // Validate ParentProjectId
            var parentProjectId = editProjectConfig.ParentProjectId;
            if (parentProjectId < 1)
                return View("Error");

            // Validate ParentProjectName
            var parentProjectName = editProjectConfig.ParentProjectName;
            if (string.IsNullOrWhiteSpace(parentProjectName))
                return View("Error");

            // Validate Name
            var newName = editProjectConfig.Name;
            if (string.IsNullOrWhiteSpace(name))
                return View("Error");

            var desc = editProjectConfig.Description;
            if (string.IsNullOrWhiteSpace(desc))
                desc = null;

            var buildNumberPostion = (int)editProjectConfig.BuildNumberPosition;
            if (buildNumberPostion < 3 || buildNumberPostion > 4)
                return View("Error");

            // Force the GeneratedVersion part that corresponds to the build number position to a value of zero.
            switch (buildNumberPostion)
            {
                case 3:
                    editProjectConfig.GeneratedVersionPart3 = 0;
                    break;
                case 4:
                    editProjectConfig.GeneratedVersionPart4 = 0;
                    break;
            }

            using (var db = new BuildVersioningDataContext())
            {
                if (name != newName && db.ProjectConfigs
                    .Include(c => c.Project)
                    .Any(c =>
                        c.Project.Id == parentProjectId &&
                        string.Compare(c.Name, newName, StringComparison.OrdinalIgnoreCase) == 0
                        ))
                    return View("Error"); // <-- A ProjectConfig with the same parent Project and the same name already exists.

                var projectConfig =
                    db.ProjectConfigs
                        .Include(c => c.Project)
                        .SingleOrDefault(c =>
                            c.Project.Id == parentProjectId &&
                            c.Id == id
                            );

                if (null == projectConfig)
                    return View("Error");

                projectConfig.Description = desc;
                projectConfig.GeneratedBuildNumberPosition = buildNumberPostion;
                projectConfig.GeneratedVersionPart1 = editProjectConfig.GeneratedVersionPart1;
                projectConfig.GeneratedVersionPart2 = editProjectConfig.GeneratedVersionPart2;
                projectConfig.GeneratedVersionPart3 = editProjectConfig.GeneratedVersionPart3;
                projectConfig.GeneratedVersionPart4 = editProjectConfig.GeneratedVersionPart4;
                projectConfig.Name = newName;
                projectConfig.ProductVersionPart1 = editProjectConfig.ProductVersionPart1;
                projectConfig.ProductVersionPart2 = editProjectConfig.ProductVersionPart2;
                projectConfig.ProductVersionPart3 = editProjectConfig.ProductVersionPart3;
                projectConfig.ProductVersionPart4 = editProjectConfig.ProductVersionPart4;
                projectConfig.ReleaseType = editProjectConfig.ReleaseType;

                db.SaveChanges();
            }

            return RedirectToRoute("ViewProjectConfig", new { projectName = parentProjectName, name });
        }
        public ActionResult EditProjectConfig(string projectName, string name)
        {
            if (string.IsNullOrWhiteSpace(projectName))
                return View("Error");

            if (string.IsNullOrWhiteSpace(name))
                return View("Error");

            ProjectConfig projectConfig;

            using (var db = new BuildVersioningDataContext())
            {
                projectConfig =
                    db.ProjectConfigs
                        .Include(c => c.Project)
                        .SingleOrDefault(c =>
                            string.Compare(c.Project.Name, projectName, StringComparison.OrdinalIgnoreCase) == 0 &&
                            string.Compare(c.Name, name, StringComparison.OrdinalIgnoreCase) == 0
                            );
            }

            if (null == projectConfig)
                return View("Error");

            var generatedBuildNumberPosition = projectConfig.GeneratedBuildNumberPosition;

            BuildNumberPositions buildNumberPosition;
            switch (generatedBuildNumberPosition)
            {
                case 3:
                    buildNumberPosition = BuildNumberPositions.Three;
                    break;

                case 4:
                    buildNumberPosition = BuildNumberPositions.Four;
                    break;

                default:
                    return View("Error");
            }

            var model =
                new EditProjectConfigModel
                {
                    BuildNumberPosition = buildNumberPosition,
                    Description = projectConfig.Description,
                    GeneratedBuildNumberPosition = projectConfig.GeneratedBuildNumberPosition,
                    GeneratedVersionPart1 = projectConfig.GeneratedVersionPart1,
                    GeneratedVersionPart2 = projectConfig.GeneratedVersionPart2,
                    GeneratedVersionPart3 = projectConfig.GeneratedVersionPart3,
                    GeneratedVersionPart4 = projectConfig.GeneratedVersionPart4,
                    Id = projectConfig.Id,
                    Name = name,
                    OriginalName = name,
                    ProductVersionPart1 = projectConfig.ProductVersionPart1,
                    ProductVersionPart2 = projectConfig.ProductVersionPart2,
                    ProductVersionPart3 = projectConfig.ProductVersionPart3,
                    ProductVersionPart4 = projectConfig.ProductVersionPart4,
                    ParentProjectId = projectConfig.Project.Id,
                    ParentProjectName = projectConfig.Project.Name,
                    ReleaseType = projectConfig.ReleaseType
                };
            return View(model);
        }