|
using System;
using System.Collections.Generic;
using System.Linq;
using SchoolSample.EntityModel;
using System.Data;
namespace SchoolSample.Wcf.Service
{
public class SchoolService : ISchoolService
{
public List<Student> GetStudents(ClientQuery clientQuery)
{
using (var context = new SchoolEntities())
{
if (clientQuery.IncludeList.Count == 0)
{
return context.People.OfType<Student>().ApplyClientQuery(clientQuery).ToList();
}
var studentList = new List<Student>();
foreach (var student in context.People.OfType<Student>().ApplyClientQuery(clientQuery).ToList())
{
var currentStudent = student;
using (var innerContext = new SchoolEntities())
{
studentList.Add(
innerContext.People.OfType<Student>()
.ApplyIncludePath(clientQuery)
.Single(n => n.PersonId == currentStudent.PersonId));
}
}
return studentList;
}
}
public Student GetStudentById(int studentId)
{
using (var context = new SchoolEntities())
{
return context.People.OfType<Student>()
.Include("Enrollments.Course")
.FirstOrDefault(n => n.PersonId == studentId);
}
}
public List<Instructor> GetInstructors(ClientQuery clientQuery)
{
using (var context = new SchoolEntities())
{
if (clientQuery.IncludeList.Count == 0)
{
return context.People.OfType<Instructor>().ApplyClientQuery(clientQuery).ToList();
}
var instructorList = new List<Instructor>();
foreach (var instructor in context.People.OfType<Instructor>().ApplyClientQuery(clientQuery).ToList())
{
var currentInstructor = instructor;
using (var innerContext = new SchoolEntities())
{
instructorList.Add(
innerContext.People.OfType<Instructor>()
.ApplyIncludePath(clientQuery)
.Single(n => n.PersonId == currentInstructor.PersonId));
}
}
return instructorList;
}
}
public Instructor GetInstructorById(int instructorId)
{
using (var context = new SchoolEntities())
{
return context.People.OfType<Instructor>()
.Include("Courses")
.FirstOrDefault(n => n.PersonId == instructorId);
}
}
public List<Course> GetCourses(ClientQuery clientQuery)
{
using (var context = new SchoolEntities())
{
if (clientQuery.IncludeList.Count == 0)
{
return context.Courses.ApplyClientQuery(clientQuery).ToList();
}
var courseList = new List<Course>();
foreach (var course in context.Courses.ApplyClientQuery(clientQuery).ToList())
{
var currentCourse = course;
using (var innerContext = new SchoolEntities())
{
courseList.Add(
innerContext.Courses
.ApplyIncludePath(clientQuery)
.Single(n => n.CourseId == currentCourse.CourseId));
}
}
return courseList;
}
}
public Course GetCourseById(int courseId)
{
using (var context = new SchoolEntities())
{
return context.Courses
.Include("Enrollments.Student")
.FirstOrDefault(n => n.CourseId == courseId);
}
}
public DefaultFilter GetDefaultFilterByScreenName(string screenName)
{
using (var context = new SchoolEntities())
{
return context.DefaultFilters
.FirstOrDefault(n => n.ScreenName == screenName);
}
}
public List<object> UpdateInstructor(Instructor item)
{
var returnList = new List<object>();
if (item == null)
{
returnList.Add("Instructor cannot be null.");
returnList.Add(0);
return returnList;
}
try
{
using (var context = new SchoolEntities())
{
switch (item.ChangeTracker.State)
{
case ObjectState.Added:
// server side validation
item.ValidateObjectGraph();
// save changes
context.People.ApplyChanges(item);
context.SaveChanges();
break;
case ObjectState.Deleted:
// verify whether there is any course assigned to this instructor
var courseExists = context.Courses.Any(n => n.InstructorId == item.PersonId);
if (courseExists)
{
returnList.Add("Error_CannotDeleteInstructor");
returnList.Add(item.PersonId);
return returnList;
}
// save changes
context.People.ApplyChanges(item);
context.SaveChanges();
break;
default:
// server side validation
item.ValidateObjectGraph();
// save changes
context.People.ApplyChanges(item);
context.SaveChanges();
break;
}
}
returnList.Add(string.Empty);
returnList.Add(item.PersonId);
}
catch (OptimisticConcurrencyException)
{
returnList.Add("Error_InstructorModifiedByAnotherUser");
returnList.Add(item.PersonId);
}
catch (Exception ex)
{
Exception exception = ex;
while (exception.InnerException != null)
{
exception = exception.InnerException;
}
var errorMessage = exception.Message;
returnList.Add(errorMessage);
returnList.Add(item.PersonId);
}
return returnList;
}
public List<object> UpdateStudent(Student item)
{
var returnList = new List<object>();
if (item == null)
{
returnList.Add("Student cannot be null.");
returnList.Add(0);
return returnList;
}
try
{
using (var context = new SchoolEntities())
{
switch (item.ChangeTracker.State)
{
case ObjectState.Added:
// server side validation
item.ValidateObjectGraph();
// save changes
context.People.ApplyChanges(item);
context.SaveChanges();
break;
case ObjectState.Deleted:
// verify whether there is any course enrollment for this student
var courseExists = context.Enrollments.Any(n => n.StudentId == item.PersonId);
if (courseExists)
{
returnList.Add("Error_CannotDeleteStudent");
returnList.Add(item.PersonId);
return returnList;
}
// save changes
context.People.ApplyChanges(item);
context.SaveChanges();
break;
default:
// server side validation
item.ValidateObjectGraph();
// save changes
context.People.ApplyChanges(item);
context.SaveChanges();
break;
}
}
returnList.Add(string.Empty);
returnList.Add(item.PersonId);
}
catch (OptimisticConcurrencyException)
{
returnList.Add("Error_StudentModifiedByAnotherUser");
returnList.Add(item.PersonId);
}
catch (Exception ex)
{
Exception exception = ex;
while (exception.InnerException != null)
{
exception = exception.InnerException;
}
var errorMessage = exception.Message;
returnList.Add(errorMessage);
returnList.Add(item.PersonId);
}
return returnList;
}
public List<object> UpdateCourse(Course item)
{
var returnList = new List<object>();
if (item == null)
{
returnList.Add("Course cannot be null.");
returnList.Add(0);
return returnList;
}
try
{
using (var context = new SchoolEntities())
{
switch (item.ChangeTracker.State)
{
case ObjectState.Added:
// server side validation
item.ValidateObjectGraph();
// verify whether the instructor for this course exists
bool instructorExists = context.People.OfType<Instructor>()
.Any(n => n.PersonId == item.InstructorId);
if (!instructorExists)
{
returnList.Add("Error_CannotAddCourseNoInstructor");
returnList.Add(item.CourseId);
return returnList;
}
// verify all enrollments for this course have valid students
bool enrollmentsValid = item.Enrollments
.Aggregate(true, (current, enrollment) =>
current && context.People.OfType<Student>()
.Any(
n =>
n.PersonId ==
enrollment.StudentId));
if (!enrollmentsValid)
{
returnList.Add("Error_CannotAddCourseNoStudent");
returnList.Add(item.CourseId);
return returnList;
}
// save changes
context.Courses.ApplyChanges(item);
context.SaveChanges();
break;
case ObjectState.Deleted:
// save changes
context.Courses.ApplyChanges(item);
context.SaveChanges();
break;
default:
// server side validation
item.ValidateObjectGraph();
// verify whether the instructor for this course exists
instructorExists =
context.People.OfType<Instructor>()
.Any(n => n.PersonId == item.InstructorId);
if (!instructorExists)
{
returnList.Add("Error_CannotUpdateCourseNoInstructor");
returnList.Add(item.CourseId);
return returnList;
}
// verify all enrollments for this course have valid students
enrollmentsValid = item.Enrollments
.Aggregate(true, (current, enrollment) =>
current && context.People.OfType<Student>()
.Any(
n =>
n.PersonId ==
enrollment.StudentId));
if (!enrollmentsValid)
{
returnList.Add("Error_CannotUpdateCourseNoStudent");
returnList.Add(item.CourseId);
return returnList;
}
// save changes
context.Courses.ApplyChanges(item);
context.SaveChanges();
break;
}
}
returnList.Add(string.Empty);
returnList.Add(item.CourseId);
}
catch (OptimisticConcurrencyException)
{
returnList.Add("Error_CourseModifiedByAnotherUser");
returnList.Add(item.CourseId);
}
catch (Exception ex)
{
Exception exception = ex;
while (exception.InnerException != null)
{
exception = exception.InnerException;
}
var errorMessage = exception.Message;
returnList.Add(errorMessage);
returnList.Add(item.CourseId);
}
return returnList;
}
public List<object> UpdateDefaultFilter(DefaultFilter item)
{
var returnList = new List<object>();
if (item == null)
{
returnList.Add("DefaultFilter cannot be null.");
returnList.Add(0);
return returnList;
}
try
{
using (var context = new SchoolEntities())
{
switch (item.ChangeTracker.State)
{
case ObjectState.Added:
// server side validation
item.ValidateObjectGraph();
// save changes
context.DefaultFilters.ApplyChanges(item);
context.SaveChanges();
break;
case ObjectState.Deleted:
// save changes
context.DefaultFilters.ApplyChanges(item);
context.SaveChanges();
break;
default:
// server side validation
item.ValidateObjectGraph();
// save changes
context.DefaultFilters.ApplyChanges(item);
context.SaveChanges();
break;
}
}
returnList.Add(string.Empty);
returnList.Add(item.ScreenName);
}
catch (Exception ex)
{
Exception exception = ex;
while (exception.InnerException != null)
{
exception = exception.InnerException;
}
var errorMessage = exception.Message;
returnList.Add(errorMessage);
returnList.Add(item.ScreenName);
}
return returnList;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Weidong has been an information system professional since 1990. He has a Master's degree in Computer Science, and is currently a MCSD .NET