public void InsertObjectGraph()
        {
            using (var context = _contextBuilder.GetContext())
            {
                Course course = new Course() { Title = "Test course", Price = 59.95M };
                var schedule = new Schedule() { Course = course, StartDate = new DateTime(2009, 1, 1), EndDate = new DateTime(2009, 12, 31), Location = "Taiga HQ" };
                schedule.Teacher = new Teacher() { Name = "Teacher1" };
                course.Schedules.Add(schedule);

                var coursesSet = context.CreateObjectSet<Course>();
                coursesSet.AddObject(course);
                context.SaveChanges();
            }

            using (var context = _contextBuilder.GetContext())
            {
                var query = from c in context.CreateObjectSet<Course>()
                            select c;
                Assert.AreEqual(1, query.Count());
                var course = query.First();
                Assert.AreEqual(1, course.Schedules.Count);
                var schedule = course.Schedules.First();
                Assert.AreEqual(new DateTime(2009, 1, 1), schedule.StartDate);
                Assert.AreEqual("Teacher1", schedule.Teacher.Name);
            }
        }
        public void UpdateObjectGraph()
        {
            // Setup initial object graph
            using (var context = _contextBuilder.GetContext())
            {
                Course course = new Course() { Title = "Test course", Price = 59.95M };
                var schedule = new Schedule() { Course = course, StartDate = new DateTime(2009, 1, 1), EndDate = new DateTime(2009, 12, 31), Location = "Taiga HQ" };
                schedule.Teacher = new Teacher() { Name = "Teacher1" };
                course.Schedules.Add(schedule);

                var coursesSet = context.CreateObjectSet<Course>();
                coursesSet.AddObject(course);
                context.SaveChanges();
            }

            // Update object graph within a new context.
            using (var context = _contextBuilder.GetContext())
            {
                var course = context.CreateObjectSet<Course>().First();

                // Change property value
                course.Title = "Test course (updated)";

                // Add a new schedule and teacher to the course
                var schedule = new Schedule() { Course = course, StartDate = new DateTime(2010, 1, 1), EndDate = new DateTime(2010, 12, 31), Location = "Taiga HQ" };
                schedule.Teacher = new Teacher() { Name = "Teacher2" };
                course.Schedules.Add(schedule);

                // Remove existing schedule from the course
                var scheduleToRemove = course.Schedules.Where(s => s.StartDate == new DateTime(2009, 1, 1)).Single();
                course.Schedules.Remove(scheduleToRemove);
                context.DeleteObject(scheduleToRemove);

                context.SaveChanges();
            }

            // Check.
            using (var context = _contextBuilder.GetContext())
            {
                var query = from c in context.CreateObjectSet<Course>()
                            select c;
                Assert.AreEqual(1, query.Count());
                var course = query.First();
                Assert.AreEqual("Test course (updated)", course.Title);
                Assert.AreEqual(1, course.Schedules.Count);
                var schedule = course.Schedules.First();
                Assert.AreEqual(new DateTime(2010, 1, 1), schedule.StartDate);
                Assert.AreEqual("Teacher2", schedule.Teacher.Name);
                Assert.AreEqual(2, context.CreateObjectSet<Teacher>().Count());
            }
        }