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));
        }