コード例 #1
0
        IEnumerable <Models.Student> IDbService.GetStudents()
        {
            var Db         = new s19110Context();
            var dbStudents = Db.Student.Include(st => st.IdEnrollmentNavigation).Include(st => st.IdEnrollmentNavigation.IdStudyNavigation).ToList();

            var modelStudents = new List <Models.Student>();

            foreach (var student in dbStudents)
            {
                var toAdd = new Models.Student()
                {
                    FirstName   = student.FirstName,
                    LastName    = student.LastName,
                    IndexNumber = student.IndexNumber,
                    BirthDate   = student.BirthDate
                };

                if (student.IdEnrollmentNavigation != null)
                {
                    toAdd.Studies  = student.IdEnrollmentNavigation.IdStudyNavigation.Name;
                    toAdd.Semester = student.IdEnrollmentNavigation.Semester;
                }
                modelStudents.Add(toAdd);
            }

            return(modelStudents);
        }
コード例 #2
0
        public PromoteStudentResponse PromoteStudents(int semester, string studies)
        {
            var db = new s19110Context();

            var enrollment = db.Enrollment.Include(en => en.IdStudyNavigation).Where(en => en.Semester == semester && en.IdStudyNavigation.Name.Equals(studies)).FirstOrDefault();

            if (enrollment == null)
            {
                throw new ArgumentException("Nie ma takiego wpisu");
            }

            var par1 = new SqlParameter("@Studies", studies);
            var par2 = new SqlParameter("@semester", semester);

            db.Database.ExecuteSqlCommand("EXEC promoteStudents @Studies, @semester", par1, par2);

            return(new PromoteStudentResponse
            {
                Semester = semester + 1,
                Studies = studies
            });



            //Zawartość procedury -- nie tworzę jej za każdym razem przy uruchamianiu tej metody

            /*Create Procedure PromoteStudents @Studies nvarchar(100), @Semester INT
             * AS BEGIN
             * Declare @IndexNumberCurs nvarchar(100), @NameCurs nvarchar(100), @SemesterCurs int, @StudyIdCurs int;
             * Declare Studenci cursor for (Select IndexNumber, Name, Semester, Studies.IdStudy From Student
             *                   Join Enrollment on Student.IdEnrollment = Enrollment.IdEnrollment join Studies on Studies.IdStudy = Enrollment.IdStudy
             *                   where Name = @Studies and Semester = @Semester );
             *
             * Open studenci;
             * Fetch next From studenci
             * into @IndexNumberCurs, @NameCurs, @SemesterCurs, @StudyIdCurs;
             *
             * WHILE @@FETCH_STATUS = 0
             * BEGIN
             * Declare @newEnrollmentId int = -1;
             * Select  @newEnrollmentId = IdEnrollment from Enrollment Join Studies on Studies.IdStudy = Enrollment.IdStudy where Name = @NameCurs AND Semester=@SemesterCurs+1;
             *
             *
             * IF @newEnrollmentId = -1
             * BEGIN
             * Insert Into Enrollment(IdEnrollment,Semester,IdStudy,StartDate) values ((Select Max(IdEnrollment)+1 From Enrollment), @SemesterCurs+1,@StudyIdCurs,SYSDATETIME());
             * update Student set IdEnrollment =( Select MAX(IdEnrollment) FROM Enrollment )where IndexNumber=@IndexNumberCurs;
             * END
             * ELSE
             * update Student set IdEnrollment = @newEnrollmentId where IndexNumber=@IndexNumberCurs;
             * Fetch next From studenci
             * into @IndexNumberCurs, @NameCurs, @SemesterCurs, @StudyIdCurs;
             * END
             *
             * Close studenci;
             * Deallocate studenci;
             * END */
        }
コード例 #3
0
        public NewModels.Enrollment GetEnrollment(String idStudenta)
        {
            var Db      = new s19110Context();
            var student = Db.Student.Where(st => st.IndexNumber.Equals(idStudenta)).FirstOrDefault();

            if (student == null)
            {
                throw new StudentNotFoundException("Nie ma takiego studenta");
            }
            return(Db.Enrollment.Where(e => e.IdEnrollment.Equals(student.IdEnrollment)).FirstOrDefault());
        }
コード例 #4
0
        public void DeleteStudent(string IndexNumber)
        {
            var Db           = new s19110Context();
            var deletedRoles = Db.StudentRoles.Where(sr => sr.IndexNumber.Equals(IndexNumber)).ToList();

            var deleted = new NewModels.Student()
            {
                IndexNumber = IndexNumber
            };

            foreach (var sr in deletedRoles)
            {
                Db.Remove(sr);
            }
            Db.SaveChanges(); //Muszę jakoś obejść więzy spójności przy rolach z poprzednich zajęć

            Db.Remove(deleted);
            Db.SaveChanges();
        }
コード例 #5
0
        Models.Student IDbService.GetStudent(string IndexNumber)
        {
            var Db      = new s19110Context();
            var student = Db.Student.Where(st => st.IndexNumber.Equals(IndexNumber)).FirstOrDefault();

            if (student == null)
            {
                throw new StudentNotFoundException("Nie ma takiego studenta");
            }
            return(new Models.Student()
            {
                FirstName = student.FirstName,
                LastName = student.LastName,
                IndexNumber = student.IndexNumber,
                BirthDate = student.BirthDate,
                Semester = student.IdEnrollmentNavigation.Semester,
                Studies = student.IdEnrollmentNavigation.IdStudyNavigation.Name
            });
        }
コード例 #6
0
        //Korzystam z innego modelu studenta, bo nie chcę, żeby można było podawać sól itp.
        public void ModifyStudent(Models.Student newData)
        {
            var Db       = new s19110Context();
            var toUpdate = Db.Student.Where(st => st.IndexNumber == newData.IndexNumber).FirstOrDefault();

            if (toUpdate == null)
            {
                throw new StudentNotFoundException("Nie ma takiego studenta");
            }
            toUpdate.FirstName = newData.FirstName != null ? newData.FirstName : toUpdate.FirstName;
            toUpdate.LastName  = newData.LastName != null ? newData.LastName : toUpdate.LastName;
            toUpdate.BirthDate = newData.BirthDate.Equals(null) ? newData.BirthDate : toUpdate.BirthDate;


            if (newData.Studies != null && newData.Semester != 0)
            {
                var enrollment = Db.Enrollment.Where(en => en.IdStudyNavigation.Name.Equals(newData.Studies) && en.Semester == newData.Semester).FirstOrDefault();
                if (enrollment != null)
                {
                    toUpdate.IdEnrollment           = enrollment.IdEnrollment;
                    toUpdate.IdEnrollmentNavigation = enrollment;
                }
                else
                {
                    var study = Db.Studies.Where(st => st.Name.Equals(newData.Studies)).FirstOrDefault();
                    if (study == null)
                    {
                        throw new ArgumentException("Podany typ studiów nie istnieje");
                    }
                    var newEnrollment = new NewModels.Enrollment()
                    {
                        IdStudy           = study.IdStudy,
                        IdStudyNavigation = study,
                        Semester          = newData.Semester
                    };
                    Db.Enrollment.Add(newEnrollment);
                    toUpdate.IdEnrollmentNavigation = newEnrollment;
                }
            }

            Db.SaveChanges();
        }
コード例 #7
0
        public EnrollStudentResponse EnrollStudent(EnrollStudentRequest request)
        {
            var db = new s19110Context();

            //1. Czy studia instnieją?
            var study = db.Studies.Where(st => st.Name.Equals(request.Studies)).FirstOrDefault();

            if (study == null)
            {
                throw new ArgumentException("Podane studia nie instnieją");
            }
            //3. Sprawdzenie czy student o takim indeksie już istnieje
            var student = db.Student.Where(st => st.IndexNumber == request.IndexNumber).FirstOrDefault();

            if (student != null)
            {
                throw new ArgumentException("Student o podanym indeksie już znajduje się w bazie danych");
            }

            //3. Szukanie w tabeli Enrollment
            var enrollment = db.Enrollment.Where(en => en.IdStudy == study.IdStudy && en.Semester == 1).FirstOrDefault();

            var toRespond = new EnrollStudentResponse();

            toRespond.LastName = request.LastName;
            var addedStudent = new NewModels.Student()
            {
                IndexNumber = request.IndexNumber,
                FirstName   = request.FirstName,
                LastName    = request.LastName,
                BirthDate   = request.BirthDate
            };

            if (enrollment == null)
            {
                //Wstawianie nowego zapisu do bazy danych
                //Używam zagnieżdżonego selecta zamiast Identity, bo nie korzystałem z niego od początku
                var addedEnrollment = new NewModels.Enrollment()
                {
                    IdEnrollment      = db.Enrollment.Max(en => en.IdEnrollment),
                    Semester          = 1,
                    StartDate         = DateTime.Now,
                    IdStudy           = study.IdStudy,
                    IdStudyNavigation = study
                };
                db.Enrollment.Add(addedEnrollment);
                addedStudent.IdEnrollment           = addedEnrollment.IdEnrollment;
                addedStudent.IdEnrollmentNavigation = addedEnrollment;
                toRespond.Semester  = addedEnrollment.Semester;
                toRespond.StartDate = addedEnrollment.StartDate;
            }
            else
            {
                addedStudent.IdEnrollment           = enrollment.IdEnrollment;
                addedStudent.IdEnrollmentNavigation = enrollment;
                toRespond.Semester  = enrollment.Semester;
                toRespond.StartDate = enrollment.StartDate;
            }



            //4. Dodanie studenta
            db.Student.Add(addedStudent);
            db.SaveChanges();
            return(toRespond);
        }
コード例 #8
0
        public IEnumerable <NewModels.Student> GetStudents()
        {
            var Db = new s19110Context();

            return(Db.Student.ToList());
        }