public IActionResult Create(CategoryViewModel model)
        {
            CategoryViewModel viewModel = null;
            try
            {
                if(!ModelState.IsValid)
                    throw new Exception("The Category model is not valid!");

                _libraryContext.Categories.Add(model.Category);
                if (_libraryContext.SaveChanges() == 0)
                {
                   throw new Exception("The Category model could not be saved!");
                }

                //Success(CreateMessage(ControllerActionType.Create, "library", model.Name), true);

                return RedirectToAction("Index");
            }
            catch(Exception ex)
            {
                ModelState.AddModelError(string.Empty, "Unable to save changes.");

                viewModel = new CategoryViewModel
                {
                    Category = model.Category,
                    Categories = _libraryContext.Categories.AsEnumerable().OrderBy(m => m.Name)
                };
            }
            return View(viewModel);
        }
        public IActionResult Create()
        {
            var model = new CategoryViewModel
            {
                Category = new Category(),
                Categories = _libraryContext.Categories.AsEnumerable().OrderBy(m => m.Name)
            };

            return View(model);
        }
        public IActionResult Edit(CategoryViewModel model)
        {
            try
            {
                if(!ModelState.IsValid)
                    throw new Exception("The Category model is not valid!");

                var originalModel = _libraryContext.Categories.FirstOrDefault(m => m.Id == model.Category.Id);

                if(originalModel == null)
                    throw new Exception("The existing Category: " + model.Category.Name + " doesn't exists anymore!");

                originalModel.Name = model.Category.Name;
                originalModel.Description = model.Category.Description;
                originalModel.ParentCategoryId = model.Category.ParentCategoryId;

                _libraryContext.Categories.Attach(originalModel);
                _libraryContext.Entry(originalModel).State = EntityState.Modified;

                if (_libraryContext.SaveChanges() == 0)
                {
                   throw new Exception("The Category model could not be saved!");
                }

                return RedirectToAction("Index");

            }
            catch(Exception ex)
            {
                ModelState.AddModelError(string.Empty, "Unable to save changes.");
            }
            return View(model);
        }
        public IActionResult Edit(Int16? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(400);
            }

            var model = _libraryContext.Categories.FirstOrDefault(m => m.Id == id);

            if(model == null)
            {
                return RedirectToAction("Index");
            }

            var viewModel = new CategoryViewModel
            {
                Category = model,
                Categories = _libraryContext.Categories.AsEnumerable().Where(m => m.Id != id).OrderBy(m => m.Name)
            };

            return View(viewModel);
        }