Cześć wszystkim, za pośrednictwem Code First wymodelowałem model domeny.

 public class Category
    {
        public int CategoryID { get; set; }
        public string CategoryName { get; set; }

        public virtual ICollection<Product> product { get; set; }
}

Wyczytałem również, iż stosowanie walidacji tj. [Required], [Display(Name = "Email")], [EmailAddress] itp. NIE POWINNY znajdować się w modelu tylko w viewModelu! Idąc tym tropem stworzyłem ViewModel.

  public class CategoryViewModel
    {
        [Required]
        public string CategoryName { get; set; }
    }

Następnie stworzyłem widok (z formularzem) i kontroler. Kontroler wygląda następująco.

 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(CategoryViewModel category)
        {
            if (ModelState.IsValid)
            {
                if (category.CategoryName != null)
                {
                    _category.CreateCat(category); // niezgodność typów
                    _category.Save();
        
                    return RedirectToAction("Index", "Category");
                }
            }
            return View(category);
        }

Problemem jest to, że w przypadku metody Create, stosując typu CategoryViewModel, właśiwość ModelSate.isValid zadziała prawidłowo, jednak jestem zmuszony do zmapowania obiektu dostarczonego z formularza "category" do obiektu biznesowego wymaganego w metodzie CreateCat jakim jest Category. Tego typu sprawą zajmują się tzw. Mapery. Jednak jeżeli moim parametrem były by obiekt modelu domeny z ADNOTACJAMI WALIDACJI czyli: ** Category category** nie musiałbym korzystać z maperów!!! Czym to jest spowodowane i czy na pewno nie wolno używać adnotacji walidacji w modelu?? Prosiłbym o sensowne odpowiedzi.
Pozdrawiam.