猿教程 Logo

已连接情况下进行CRUD操作

在连接场景中CRUD操作是一个相当简单的任务,因为上下文自动跟踪发生在实体的生命周期中的变化,默认情况下AutoDetectChangesEnabled设置为true。

在前面的课程中我们已经为SchoolDB数据库创建了一个实体数据模型。

下面的例子显示在连接场景(上下文)中如何添加、更新和删除一个实体,进而将在数据库中执行插入、更新和删除命令。

上下文将自动检测和更新一个实体的状态变化。

using (var context = new SchoolDBEntities())
{
    var studentList = context.Students.ToList<Student>();
    //Perform create operation
    context.Students.Add(new Student() { StudentName = "New Student" });
    //Perform Update operation
    Student studentToUpdate = studentList.Where(s => s.StudentName == "student1").FirstOrDefault<Student>();
    studentToUpdate.StudentName = "Edited student1";
    //Perform delete operation
    context.Students.Remove(studentList.ElementAt<Student>(0));
    //Execute Inser, Update & Delete queries in the database
    context.SaveChanges();
}

注意:如果context.Configuration.AutoDetectChangesEnabled = false,这种情况上下文将不能检测到现有实体的更改,这时不要直接执行更新操作。在SaveChanges()执行之前你需要调用context.ChangeTracker.DetectChanges(),这样可以检测编辑过的实体并且将该实体状态标记为修改。

被操作的实体对象必须是在DBSet的集合中,否则上下文将无法跟踪实体的更改。

下面的代码将不会插入或删除Student。

它只会更新学生实体,因为我们是从列表中添加和删除实体,而不是从DbSet。

using (var context = new SchoolDBEntities())
{
    var studentList = context.Students.ToList<Student>();
    //Add student in list
    studentList.Add(new Student() { StudentName = "New Student" });
    //Perform update operation
    Student studentToUpdate = studentList.Where(s => s.StudentName == "Student1").FirstOrDefault<Student>();
    studentToUpdate.StudentName = "Edited student1";
    //Delete student from list
    if (studentList.Count > 0)
        studentList.Remove(studentList.ElementAt<Student>(0));
    //SaveChanges will only do update operation not add and delete
    context.SaveChanges();
}

在下一节课程中,我们将学习如何在断开连接的场景做的CRUD操作。



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/entity/crud-in-connected.html