public CreateInstructorWithCourses.Response CreateInstructorWithCourses(CreateInstructorWithCourses.Request request)
        {
            var retVal = Logger.TraceCall(() =>
            {
                var requestHandler = new CreateInstructorWithCoursesHandler(_Repository);
                var response = requestHandler.Handle(request);
                return response;
            });

            return retVal;
        }
        public CreateInstructorWithCourses.Response Handle(CreateInstructorWithCourses.Request request)
        {
            var validationDetails = Validator.ValidateRequest(request);
            if (validationDetails.HasValidationIssues)
                return new CreateInstructorWithCourses.Response(validationDetails);

            var container = InstructorFactory.Create(_Repository, request.CommandModel);
            validationDetails = _Repository.Save(container);

            var instructorId = default(int?);
            if (!validationDetails.HasValidationIssues)
                instructorId = container.FindEntity<Instructor>().ID;

            return new CreateInstructorWithCourses.Response(validationDetails, instructorId);
        }
        public static EntityStateWrapperContainer Create(IQueryRepository queryRepository, CreateInstructorWithCourses.CommandModel commandModel)
        {
            // could use Course.CreatePartial here and attachEntities using EntityStateWrapperContainer
            var courses = commandModel.SelectedCourses == null
                ? new Course[0].ToList()
                : queryRepository.GetEntities<Course>(new FindByIdsSpecificationStrategy<Course>(p => p.CourseID, commandModel.SelectedCourses)).ToList();

            var instructor = new Instructor
            {
                HireDate = commandModel.HireDate,
                FirstMidName = commandModel.FirstMidName,
                LastName = commandModel.LastName,
                Courses = courses,
                OfficeAssignment = new OfficeAssignment { Location = commandModel.OfficeLocation },
            };

            return new EntityStateWrapperContainer().AddEntity(instructor);
        }