Exemplo n.º 1
0
        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);
        }
Exemplo n.º 4
0
        // 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));
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 7
0
        // 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;
        }