/// <summary> /// 利用Foreign Key Association来插入一条新的Course并将其设置成附属于一个已存在的Department。 /// </summary> private static void InsertByExistingEntities() { using (FKAssociationEntities context = new FKAssociationEntities()) { // 创建一个新的Course实体。 Course course = new Course() { CourseID = 5002, Title = "Data Structure", Credits = 3, StatusID = true, // 设置外键属性为一个已存在的Department实体的DepartmentID。 DepartmentID = 5 }; try { // 将Course加入ObjectContext。 context.AddToCourses(course); // 注意: Course实体的导航属性在SaveChanges方法未被调用前不会映射到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 (FKAssociationEntities context = new FKAssociationEntities()) { try { // 查询数据库来获取要更新的实体 var originalCourse = context.Courses.SingleOrDefault( c => c.CourseID == updatedCourse.CourseID); ///////////////////////////////////////////////////////// // 使用ApplyCurrentValues API来更新实体 // // 在EFv1时代,EFv1中的ApplyPropertyChanges方法能够使用其他实体的值来更新一个实体。 // 在EF4时代,此方法更名为ApplyCurrentValues,此方法打算用来更新一个实体的当前值, // 假定是刚从数据库提取的实体。这将会允许SaveChanges方法创建适当的命令来将那些新数据 // 更新到实体。 // 应用于更新已存在Course实体的值包括外键属性。 // 在这里我们不需要提供已存在的Department实体。 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实体包括外键属性的原始值。 // 在这里我们不需要提供已存在的Department实体。 context.Courses.ApplyOriginalValues(originalCourse); // 保存更改。 context.SaveChanges(); * */ } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
/// <summary> /// Create a new Course object. /// </summary> /// <param name="courseID">Initial value of the CourseID property.</param> public static Course CreateCourse(global::System.Int32 courseID) { Course course = new Course(); course.CourseID = courseID; return course; }
/// <summary> /// 利用Foreign Key Association来插入一条新的Course和Department关联实体 /// </summary> private static void InsertNewRelatedEntities() { using (FKAssociationEntities context = new FKAssociationEntities()) { // 创建一个新的Department实体。 Department department = new Department() { DepartmentID = 5, Name = "Computer Science", Budget = 400000, StartDate = DateTime.Now }; // 创建一个新的Course实体。 Course course = new Course() { CourseID = 5001, Title = "Operation System", Credits = 4, StatusID = true, // 设置它的外键属性。 DepartmentID = department.DepartmentID }; try { // 将Department和Course实体添加到ObjectContext。 context.AddToDepartments(department); context.AddToCourses(course); // 注意: Department和Course实体之间的导航属性在SaveChanges方法未被调用前不会映射到彼此。 context.SaveChanges(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
/// <summary> /// Deprecated Method for adding a new object to the Courses EntitySet. Consider using the .Add method of the associated ObjectSet<T> property instead. /// </summary> public void AddToCourses(Course course) { base.AddObject("Courses", course); }