public static void Main()
        {
            //Create and initialize the database

            Database.SetInitializer(new MigrateDatabaseToLatestVersion
                <SchoolContext, School.Data.Migrations.Configuration>());

            var context = new SchoolContext();
            using (context)
            {
                var school = new TownSchool { Name = "School", Location = "Town" };
                var firstStudent = new Student { FirstName = "Ivan", LastName = "Ivanov", Age = 9, Grade = 4, TownSchool = school };
                var secondStudent = new Student { FirstName = "Peter", LastName = "Petrov", Age = 15, Grade = 9, TownSchool = school };
                var firstMark = new Mark { Subject = "Math", Value = 5, Student = firstStudent };
                var secondMark = new Mark { Subject = "History", Value = 4, Student = secondStudent };
                var thirdMark = new Mark { Subject = "IT", Value = 6, Student = secondStudent };

                context.Marks.Add(firstMark);
                context.Marks.Add(secondMark);
                context.Marks.Add(thirdMark);
                context.Students.Add(firstStudent);
                context.Students.Add(secondStudent);
                context.TownSchools.Add(school);
                context.SaveChanges();
            }
        }
        public static MarkModel Convert(Mark mark)
        {
            MarkModel model = new MarkModel
            {
                MarkId = mark.MarkId,
                Subject = mark.Subject,
                Value = mark.Value,
                StudentId = mark.StudentId
            };

            return model;
        }
        public static MarkFullModel Convert(Mark mark)
        {
            MarkFullModel model = new MarkFullModel
            {
                MarkId = mark.MarkId,
                Subject = mark.Subject,
                Value = mark.Value,
                Student = new StudentModel
                {
                    StudentId = mark.Student.StudentId,
                    FirstName = mark.Student.FirstName,
                    LastName = mark.Student.LastName,
                    Age = mark.Student.Age,
                    Grade = mark.Student.Grade,
                    MarksCount = mark.Student.Marks.Count,
                    TownSchoolId = mark.Student.TownSchoolId
                }
            };

            return model;
        }
        // POST api/artists
        //[HttpPost]
        public HttpResponseMessage Post(Mark model)
        {
            if (model.Subject == null)
            {
                var errResponse = this.Request.CreateErrorResponse(
                    HttpStatusCode.BadRequest, "Mark Subject could not be null");
                throw new HttpResponseException(errResponse);
            }

            if (model.Value <= 0 || model.StudentId <= 0)
            {
                var errResponse = this.Request.CreateErrorResponse(
                    HttpStatusCode.BadRequest, "Mark Value and StudentId should be positive numbers");
                throw new HttpResponseException(errResponse);
            }

            var entity = this.markRepository.Add(model);
            var response =
                Request.CreateResponse(HttpStatusCode.Created, entity);
            response.Headers.Location = new Uri(Url.Link("DefaultApi",
                new { id = entity.MarkId }));

            return response;
        }
        // PUT api/artists/5
        //[HttpPut]
        public HttpResponseMessage Put(int id, Mark model)
        {
            if (model.Subject == null)
            {
                var errResponse = this.Request.CreateErrorResponse(
                    HttpStatusCode.BadRequest, "Mark Subject could not be null");
                throw new HttpResponseException(errResponse);
            }

            if (model.Value <= 0 || model.StudentId <= 0)
            {
                var errResponse = this.Request.CreateErrorResponse(
                    HttpStatusCode.BadRequest, "Mark Value and StudentId should be positive numbers");
                throw new HttpResponseException(errResponse);
            }

            var entity = this.markRepository.Get(id);

            if (entity == null)
            {
                var errResponse = this.Request.CreateErrorResponse(
                    HttpStatusCode.BadRequest, string.Format("There is no element with id {0}", id));
                throw new HttpResponseException(errResponse);
            }

            entity = this.markRepository.Update(id, model);
            var response =
                Request.CreateResponse(HttpStatusCode.OK, entity);
            response.Headers.Location = new Uri(Url.Link("DefaultApi",
                new { id = entity.MarkId }));

            return response;
        }
        public void UpdeteStudentMarksTest()
        {
            var school = new TownSchool { Name = "School" };
            var student = new Student { FirstName = "Sam", LastName = "Chen", Age = 9, Grade = 4, TownSchool = school };
            var mark = new Mark { Subject = "Math", Value = 5, Student = student };
            dbContext.Set<TownSchool>().Add(school);
            dbContext.Set<Student>().Add(student);
            dbContext.Set<Mark>().Add(mark);
            dbContext.SaveChanges();

            var studentId = student.StudentId;
            var schoolId = student.TownSchoolId;
            student.Marks.First().Subject = "IT";
            var updatedStudent = this.studentsRepository.Update(studentId, student);
            Assert.IsNotNull(updatedStudent);
            Assert.AreEqual(1, updatedStudent.Marks.Count);
            Assert.AreEqual("IT", updatedStudent.Marks.First().Subject);
            Assert.AreEqual(5, updatedStudent.Marks.First().Value);
        }