EF4 MVC3 model state validation
===

Using this model:

    public class Cases
        {
        //case data model for call center
        //implement lists for all related child tables too

        [Key]
        public int CasesID { get; set; }

        public string CaseNumber { get; set; }

        [Required(ErrorMessage = "Customer is Required")]
        public int CustomerID { get; set; }
        public virtual Customer Customer { get; set; }
        
        [MaxLength(50)]
        public string UserName { get; set; }  //get user name from the aspnet membership
        
        [Required(ErrorMessage = "Case Category is Required")]
        public int CaseCategoryID { get; set; }

        [Required(ErrorMessage = "Technician is Required")]
        public int TechnicianID { get; set; }
        public virtual Technician Technicians { get; set; }
        
        [Required(ErrorMessage = "Engine Model is Required")]
        public int EngineModelID { get; set; }
        public virtual EngineModel EngineModel { get; set; }

        [MaxLength(50)]
        public string BMSWorkorder { get; set; }

        [MaxLength(50)]
        [Required(ErrorMessage = "Status is Required")]
        public string CaseStatus { get; set; }

        [MaxLength(50)]
        public string OpenedBy { get; set; }

        [Required(ErrorMessage = "Opened Date is Required")]
        [DataType(DataType.DateTime)]
        public DateTime? OpenedDate { get; set; }

        [MaxLength(50)]
        public string ClosedBy { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime? ClosedDate { get; set; }

        [MaxLength(50)]
        [Required(ErrorMessage="Caller First Name is Required")]
        public string CallerFirstName { get; set; }

        [MaxLength(50)]
        [Required(ErrorMessage = "Caller Last Name is Required")]
        public string CallerLastName { get; set; }

        [MaxLength(100)]
        public string AdditionalContact { get; set; }

        [MaxLength(10)]
        [Required(ErrorMessage = "Qualified is Required")]
        public string Qualified { get; set; }

        public string Description { get; set; }

        [MaxLength(50)]
        [Required(ErrorMessage = "ESN is Required")]
        public string ESN { get; set; }

        [MaxLength(50)]
        [Required(ErrorMessage = "Mileage is Required")]
        public string Mileage { get; set; }
        
        [DataType(DataType.Date)]
        public DateTime? DateInService { get; set; }

        [MaxLength(50)]
        public string ESTR { get; set; }

        [MaxLength(50)]
        [Required(ErrorMessage = "EDS is Required")]
        public string EDS { get; set; }

        [MaxLength(50)]
        public string GensetSerialNumber { get; set; }

        [MaxLength(50)]
        public string GensetModelNumber { get; set; }

        //child Case Notes records
        public virtual ICollection<CaseNotes> CaseNotes { get; set; }
        
        //child case attachment records
        public virtual ICollection<Attachment> Attachments { get; set; }
        
        //child case complaint records
        public virtual ICollection<CaseComplaint> CaseComplaint { get; set; }
        
        //tracking fields
        public DateTime? CreatedOn { get; set; }
        [MaxLength(50)]
        public string CreatedBy { get; set; }
        public DateTime? ModifiedOn { get; set; }
        [MaxLength(50)]
        public string ModifiedBy { get; set; }
        }

I am wondering why even though only some of the properties are marked required, the modelstate does not get set valid unless all properties have values when saving.

Am I doing something wrong?