public EntityStateWrapperContainer Modify(IQueryRepository queryRepository, ContosoUniversity.Domain.Core.Behaviours.Instructors.InstructorModifyAndCourses.CommandModel commandModel) { var retVal = new EntityStateWrapperContainer(); // Removals first Courses.Clear(); if (OfficeAssignment != null && commandModel.OfficeLocation == null) { retVal.DeleteEntity(OfficeAssignment); } // Update properties FirstMidName = commandModel.FirstMidName; LastName = commandModel.LastName; HireDate = commandModel.HireDate; OfficeAssignment = new OfficeAssignment { Location = commandModel.OfficeLocation }; if (commandModel.SelectedCourses != null) { Courses = queryRepository.GetEntities <Course>( new FindByIdsSpecificationStrategy <Course>(p => p.CourseID, commandModel.SelectedCourses)).ToList(); } retVal.ModifyEntity(this); return(retVal); }
// Create student public static StudentCreate.Response Handle(IRepository repository, StudentCreate.Request request) { var container = new EntityStateWrapperContainer(); container.AddEntity(StudentFactory.Create(request.CommandModel)); var validationDetails = repository.Save(container); var studentId = default(int?); if (!validationDetails.HasValidationIssues) studentId = container.FindEntity<Student>().ID; return new StudentCreate.Response(validationDetails, studentId); }
// Create course public static CourseCreate.Response Handle(IRepository repository, CourseCreate.Request request) { // Validation now performed in the dispacther decorators (See AutoValidate<T> in the DomainBootstrapper class) var container = new EntityStateWrapperContainer(); container.AddEntity(CourseFactory.Create(request.CommandModel)); var validationDetails = repository.Save(container); var courseId = default(int?); if (!validationDetails.HasValidationIssues) courseId = container.FindEntity<Course>().CourseID; return new CourseCreate.Response(validationDetails, courseId); }
// Create student public static StudentCreate.Response Handle(IRepository repository, StudentCreate.Request request) { var container = new EntityStateWrapperContainer(); container.AddEntity(StudentFactory.Create(request.CommandModel)); var validationDetails = repository.Save(container); var studentId = default(int?); if (!validationDetails.HasValidationIssues) { studentId = container.FindEntity <Student>().ID; } return(new StudentCreate.Response(validationDetails, studentId)); }
public static ValidationMessageCollection Save( this IRepository repository, EntityStateWrapperContainer entityContainer, Func <DbUpdateConcurrencyException, ValidationMessageCollection> dbUpdateConcurrencyExceptionFunc = null, Func <RetryLimitExceededException, ValidationMessageCollection> retryLimitExceededExceptionFunc = null) { try { entityContainer.UnitsOfWork().ToList().ForEach(uow => { UpdateStates(repository, uow); repository.Save(); }); return(new ValidationMessageCollection()); } catch (DbUpdateConcurrencyException dbUpdateEx) { Logger.Warn(dbUpdateEx, dbUpdateEx.Message); if (dbUpdateConcurrencyExceptionFunc != null) { return(dbUpdateConcurrencyExceptionFunc(dbUpdateEx)); } var validationDetails = new ValidationMessageCollection(); validationDetails.Add(new ValidationMessage(string.Empty, dbUpdateEx.ToString())); return(validationDetails); } catch (RetryLimitExceededException rleEx) { Logger.Error(rleEx, rleEx.Message); if (retryLimitExceededExceptionFunc != null) { return(retryLimitExceededExceptionFunc(rleEx)); } var validationDetails = new ValidationMessageCollection(); validationDetails.Add(new ValidationMessage(string.Empty, "Unable to save changes. Try again, and if the problem persists, see your system administrator.")); return(validationDetails); } catch (Exception ex) { Logger.Error(ex, ex.Message); throw; } }
// Delete instructor public static InstructorDelete.Response Handle(IRepository repository, InstructorDelete.Request request) { var container = new EntityStateWrapperContainer(); var depts = repository.GetEntities<Department>(p => p.InstructorID == request.CommandModel.InstructorId); foreach (var dept in depts) container.Add(dept.SetInstructorId(null)); var deletedInstructor = repository.GetEntity<Instructor>( p => p.ID == request.CommandModel.InstructorId, new EagerLoadingQueryStrategy<Instructor>( p => p.OfficeAssignment)); container.Add(deletedInstructor.Delete()); var validationDetails = repository.Save(container); return new InstructorDelete.Response(validationDetails); }
// Create course public static CourseCreate.Response Handle(IRepository repository, CourseCreate.Request request) { // Validation now performed in the dispacther decorators (See AutoValidate<T> in the DomainBootstrapper class) var container = new EntityStateWrapperContainer(); container.AddEntity(CourseFactory.Create(request.CommandModel)); var validationDetails = repository.Save(container); var courseId = default(int?); if (!validationDetails.HasValidationIssues) { courseId = container.FindEntity <Course>().CourseID; } return(new CourseCreate.Response(validationDetails, courseId)); }
// Delete instructor public static InstructorDelete.Response Handle(IRepository repository, InstructorDelete.Request request) { var container = new EntityStateWrapperContainer(); var depts = repository.GetEntities <Department>(p => p.InstructorID == request.CommandModel.InstructorId); foreach (var dept in depts) { container.Add(dept.SetInstructorId(null)); } var deletedInstructor = repository.GetEntity <Instructor>( p => p.ID == request.CommandModel.InstructorId, new EagerLoadingQueryStrategy <Instructor>( p => p.OfficeAssignment)); container.Add(deletedInstructor.Delete()); var validationDetails = repository.Save(container); return(new InstructorDelete.Response(validationDetails)); }
public EntityStateWrapperContainer Modify(IQueryRepository queryRepository, ContosoUniversity.Domain.Core.Behaviours.Instructors.InstructorModifyAndCourses.CommandModel commandModel) { var retVal = new EntityStateWrapperContainer(); // Removals first Courses.Clear(); if (OfficeAssignment != null && commandModel.OfficeLocation == null) retVal.DeleteEntity(OfficeAssignment); // Update properties FirstMidName = commandModel.FirstMidName; LastName = commandModel.LastName; HireDate = commandModel.HireDate; OfficeAssignment = new OfficeAssignment { Location = commandModel.OfficeLocation }; if (commandModel.SelectedCourses != null) { Courses = queryRepository.GetEntities<Course>( new FindByIdsSpecificationStrategy<Course>(p => p.CourseID, commandModel.SelectedCourses)).ToList(); } retVal.ModifyEntity(this); return retVal; }