/// <summary>
        /// Update an existing Course entity (only its regular properties,
        /// not for the relationship)
        /// </summary>
        /// <param name="updatedCourse">An existing Course entity with
        /// updated data</param>
        private static void UpdateExistingEntities(Course updatedCourse)
        {
            using (IndependentAssociationEntities context =
                       new IndependentAssociationEntities())
            {
                try
                {
                    // Attach a new Course entity by the primary key of the
                    // updated Course entity.
                    context.Courses.Attach(new Course()
                    {
                        CourseID = updatedCourse.CourseID
                    });

                    // Apply the updated regular properties to the attached
                    // Course entity.
                    // Note: the navigation property is not updated here
                    // even if it is modified.
                    context.Courses.ApplyCurrentValues(updatedCourse);
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        /// <summary>
        /// Insert a new Course and set it belong to an existing Department
        /// by Independent Association
        /// </summary>
        private static void InsertByExistingEntities()
        {
            using (IndependentAssociationEntities context =
                       new IndependentAssociationEntities())
            {
                // Create a new Course entity.
                Course course = new Course()
                {
                    CourseID = 6002,
                    Title    = ".NET Framework",
                    Credits  = 4,
                    StatusID = true,
                    // Set the navigation property to an existing Department
                    // entity.
                    Department = context.Departments.Single(
                        d => d.DepartmentID == 6)
                };

                try
                {
                    // Note: No need to add the Course entity into the
                    // ObjectContext because it is automatically done by
                    // relating to an existing Department entity.
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        /// <summary>
        /// Independent Association下插入一条新的Course并将其设置成附属于一个已存在的Department。
        /// </summary>
        private static void InsertByExistingEntities()
        {
            using (IndependentAssociationEntities context =
                       new IndependentAssociationEntities())
            {
                // 创建一个新的Course实体。
                Course course = new Course()
                {
                    CourseID = 6002,
                    Title    = ".NET Framework",
                    Credits  = 4,
                    StatusID = true,
                    // 设置导航属性为已存在的Department实体
                    Department = context.Departments.Single(
                        d => d.DepartmentID == 6)
                };

                try
                {
                    // 注意: 不需要将Course实体添加进ObjectContext,因为它
                    // 被自动关联到了一个已存在的Department实体。
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        /// <summary>
        /// 更新一个已存在的Course实体(只有常规属性,不包括关系)
        /// </summary>
        /// <param name="updatedCourse">一个已存在的Course实体和更新的数据</param>
        private static void UpdateExistingEntities(Course updatedCourse)
        {
            using (IndependentAssociationEntities context =
                       new IndependentAssociationEntities())
            {
                try
                {
                    // 查询数据库来获取要更新的实体
                    var originalCourse = context.Courses.SingleOrDefault(
                        c => c.CourseID == updatedCourse.CourseID);

                    /////////////////////////////////////////////////////////
                    // 使用ApplyCurrentValues API来更新实体
                    //
                    // 在EFv1时代,EFv1中的ApplyPropertyChanges方法能够使用其他实体的值来更新一个实体。
                    // 在EF4时代,此方法更名为ApplyCurrentValues,此方法打算用来更新一个实体的当前值,
                    // 假定是刚从数据库提取的实体。这将会允许SaveChanges方法创建适当的命令来将那些新数据
                    // 更新到实体。

                    // 适用于最新的Course实体包括外键属性的原始值。
                    // 注意: 在这里,导航属性就算被更改了也不会被更新。
                    if (originalCourse != null)
                    {
                        context.Courses.ApplyCurrentValues(updatedCourse);
                    }

                    // 保存更改。
                    context.SaveChanges();


                    /*
                     * /////////////////////////////////////////////////////////
                     * // 使用ApplyOriginalValues API来更新实体
                     * //
                     * // ApplyOriginalValues假设所被追踪的实体已经拥有需要被更新到数据库的数据,而非实体的原始数据。
                     * // 这是为n层应用程序设计的。通过在拥有新数据的实体上调用Attach方法,实体将自动变为Unchanged状态,
                     * // 并且拥有相应匹配的当前值和过去值。ApplyOriginalValues帮助我们通过分离实体来使用实体的原始值。
                     *
                     * // 为了展示ApplyOriginalValues,我们首先分离原始的Course实体。
                     * context.Detach(originalCourse);
                     *
                     * // 附加一个新的更新的Course实体
                     * context.Courses.Attach(updatedCourse);
                     *
                     * // 适用于最新的Course实体包括外键属性的原始值。
                     * // 注意: 在这里,导航属性就算被更改了也不会被更新。
                     * context.Courses.ApplyOriginalValues(originalCourse);
                     *
                     * // 保存更改。
                     * context.SaveChanges();
                     */
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        /// <summary>
        /// Insert a new Course and its Department entity by Independent
        /// Association
        /// </summary>
        private static void InsertNewRelatedEntities()
        {
            using (IndependentAssociationEntities context =
                       new IndependentAssociationEntities())
            {
                // Create a new Department entity.
                Department department = new Department()
                {
                    DepartmentID = 6,
                    Name         = "Software Engineering",
                    Budget       = 300000,
                    StartDate    = DateTime.Now
                };

                // Create a new Course entity.
                Course course = new Course()
                {
                    CourseID = 6001,
                    Title    = "Object Oriented",
                    Credits  = 4,
                    StatusID = true,
                    // Set the navigation property.
                    Department = department
                };

                try
                {
                    // Note: Only need to add one entity because the
                    // relationship and related entity will be added
                    // automatically.
                    context.AddToCourses(course);

                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        /// <summary>
        /// Independent Association下插入一条新的Course和Department关联实体
        /// </summary>
        private static void InsertNewRelatedEntities()
        {
            using (IndependentAssociationEntities context =
                       new IndependentAssociationEntities())
            {
                // 创建一个新的Department实体。
                Department department = new Department()
                {
                    DepartmentID = 6,
                    Name         = "Software Engineering",
                    Budget       = 300000,
                    StartDate    = DateTime.Now
                };

                // 创建一个新的Course实体。
                Course course = new Course()
                {
                    CourseID = 6001,
                    Title    = "Object Oriented",
                    Credits  = 4,
                    StatusID = true,
                    // 设置导航属性。
                    Department = department
                };

                try
                {
                    // 注意: 只需要添加一个实体,因为关系和关联实体将自动被添加。
                    context.AddToCourses(course);

                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        /// <summary>
        /// Independent Association下插入一条新的Course并将其设置成附属于一个已存在的Department。
        /// </summary>
        private static void InsertByExistingEntities()
        {
            using (IndependentAssociationEntities context =
                new IndependentAssociationEntities())
            {
                // 创建一个新的Course实体。
                Course course = new Course()
                {
                    CourseID = 6002,
                    Title = ".NET Framework",
                    Credits = 4,
                    StatusID = true,
                    // 设置导航属性为已存在的Department实体
                    Department = context.Departments.Single(
                        d => d.DepartmentID == 6)
                };

                try
                {
                    // 注意: 不需要将Course实体添加进ObjectContext,因为它
                    // 被自动关联到了一个已存在的Department实体。
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        /// <summary>
        /// 更新一个已存在的Course实体(只有常规属性,不包括关系)
        /// </summary>
        /// <param name="updatedCourse">一个已存在的Course实体和更新的数据</param>
        private static void UpdateExistingEntities(Course updatedCourse)
        {
            using (IndependentAssociationEntities context =
                new IndependentAssociationEntities())
            {
                try
                {
                    // 查询数据库来获取要更新的实体
                    var originalCourse = context.Courses.SingleOrDefault(
                        c => c.CourseID == updatedCourse.CourseID);

                    /////////////////////////////////////////////////////////
                    // 使用ApplyCurrentValues API来更新实体
                    //
                    // 在EFv1时代,EFv1中的ApplyPropertyChanges方法能够使用其他实体的值来更新一个实体。
                    // 在EF4时代,此方法更名为ApplyCurrentValues,此方法打算用来更新一个实体的当前值,
                    // 假定是刚从数据库提取的实体。这将会允许SaveChanges方法创建适当的命令来将那些新数据
                    // 更新到实体。

                    // 适用于最新的Course实体包括外键属性的原始值。
                    // 注意: 在这里,导航属性就算被更改了也不会被更新。
                    if (originalCourse != null)
                    {
                        context.Courses.ApplyCurrentValues(updatedCourse);
                    }

                    // 保存更改。
                    context.SaveChanges();

                    /*
                    /////////////////////////////////////////////////////////
                    // 使用ApplyOriginalValues API来更新实体
                    //
                    // ApplyOriginalValues假设所被追踪的实体已经拥有需要被更新到数据库的数据,而非实体的原始数据。
                    // 这是为n层应用程序设计的。通过在拥有新数据的实体上调用Attach方法,实体将自动变为Unchanged状态,
                    // 并且拥有相应匹配的当前值和过去值。ApplyOriginalValues帮助我们通过分离实体来使用实体的原始值。

                    // 为了展示ApplyOriginalValues,我们首先分离原始的Course实体。
                    context.Detach(originalCourse);

                    // 附加一个新的更新的Course实体
                    context.Courses.Attach(updatedCourse);

                    // 适用于最新的Course实体包括外键属性的原始值。
                    // 注意: 在这里,导航属性就算被更改了也不会被更新。
                    context.Courses.ApplyOriginalValues(originalCourse);

                    // 保存更改。
                    context.SaveChanges();
                    */
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        /// <summary>
        /// Independent Association下插入一条新的Course和Department关联实体
        /// </summary>
        private static void InsertNewRelatedEntities()
        {
            using (IndependentAssociationEntities context =
                new IndependentAssociationEntities())
            {
                // 创建一个新的Department实体。
                Department department = new Department()
                {
                    DepartmentID = 6,
                    Name = "Software Engineering",
                    Budget = 300000,
                    StartDate = DateTime.Now
                };

                // 创建一个新的Course实体。
                Course course = new Course()
                {
                    CourseID = 6001,
                    Title = "Object Oriented",
                    Credits = 4,
                    StatusID = true,
                    // 设置导航属性。
                    Department = department
                };

                try
                {
                    // 注意: 只需要添加一个实体,因为关系和关联实体将自动被添加。
                    context.AddToCourses(course);

                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }