EF6基础系列(12)--- EF进行批量添加/删除

Posted wyy1234

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF6基础系列(12)--- EF进行批量添加/删除相关的知识,希望对你有一定的参考价值。

  EF6添加了批量添加/删除实体集合的方法,我们可以使用DbSet.AddRange()方法将实体集合添加到上下文,同时实体集合中的每一个实体的状态都标记为Added,在执行SaveChange()方法时为每个实体执行Insert操作;同样的我们使用DbSet.RemoveRange()方法将集合中的所有实体都标记为deleted状态,在执行SaveChange()方法时为每一条数据执行delete操作。

通过AddRange()和RemoveRange()方法可以有效提升性能,所以建议在进行不批量数据的添加/删除时采用这两种方法。

一个批量添加的栗子:

IList<Student> newStudents = new List<Student>() {
                                    new Student() { StudentName = "Steve" };
                                    new Student() { StudentName = "Bill" };
                                    new Student() { StudentName = "James" };
                                };               

using (var context = new SchoolDBEntities())
{
    context.Students.AddRange(newStudents);
    context.SaveChanges();
}

一个批量删除的栗子:

IList<Student> studentsToRemove = new List<Student>() {
                                    new Student() { StudentId = 1, StudentName = "Steve" };
                                    new Student() { StudentId = 2, StudentName = "Bill" };
                                    new Student() { StudentId = 3, StudentName = "James" };
                                };
    
using (var context = new SchoolDBEntities())
{
    context.Students.RemoveRange(studentsToRemove);
    context.SaveChanges();
}

特别注意:EF Core的AddRange()和RemoveRange()只访问一次数据库,所以性能比EF6更高。

以上是关于EF6基础系列(12)--- EF进行批量添加/删除的主要内容,如果未能解决你的问题,请参考以下文章

EF6基础系列(九)---预先加载延迟加载显示加载

EF6基础系列(十)---离线场景保存实体和实体图集

EF6基础系列(17)---记录数据库命令

EF6基础系列(九)--- 附加离线实体图集到上下文

EF6基础系列(五)---EF中的实体关系

EF6.0批量插入