EF6:向db或批量操作添加多个数据

时间:2017-07-03 19:26:02

标签: entity-framework-6

查看我的代码如何在db中添加多个数据。

List<Employee> oEmp = new List<Employee>
{
    new Employee{Name="New employee2", Salary=5000},
    new Employee{Name="New employee3", Salary=6000},
    new Employee{Name="New employee4", Salary=7000}
};

using (var ctx = new TestEFContext())
{
    foreach (Employee emp in oEmp)
    {
        ctx.Employees.Add(emp);
    }
    ctx.SaveChanges();
}

只是好奇知道EF6如何插入多个数据?它是一次性将多个数据插入数据库还是在内部逐个添加数据?

上面的代码是否可以视为批量插入或批量插入完全不同?

我看到人们使用许多不同的扩展来使用EF进行批量插入。这里有一个链接https://stackoverflow.com/a/43979807/6188148

所以我在这篇文章中有两个问题。请详细回答两个问题。

1)EF如何在数据库中插入多个数据.....一次性或不同的事情发生在幕后?

2)我在表格中插入多个数据的方式....是否会考虑批量插入或批量插入是不同的?

感谢

1 个答案:

答案 0 :(得分:0)

免责声明:我是该项目的所有者Entity Framework Extensions

  

EF如何在数据库中插入多个数据.....一次性或不同的事情发生在幕后?

EF为您插入的每个实体执行数据库往返。

因此,如果您插入5000个实体,将执行5000次数据库往返。

无论使用多少实体,它始终使用相同的策略。

  

我在表格中插入多个数据的方式......是否会被考虑   批量插入或批量插入是不同的?

批量插入库完全不同。他们阅读模型并使用引擎盖下的SqlBulkCopy来执行批量插入。

您的代码将为每个实体进行数据库往返,当涉及数千个实体时,这些实体的速度很慢。

  

我应该使用AddRange而不是Add吗?

是的,在添加多个实体时,AddRange只会检测一次更改,从而显着提高在上下文中添加实体的性能。