根据this https://code.msdn.microsoft.com/entity-framework-batch-994cd739,可以使用以下代码在实体中批量插入:
var customers = GetCustomers();
db.Customers.AddRange(customers);
db.SaveChanges();
我使用 SQL Profiler 来验证执行了多少插入查询,并且我看到列表中的每个元素都有一个插入。
Why?
AddRange
添加范围不会执行 BulkInsert,它只是在所有实体添加到集合后检测更改一次。
DetectChange 方法可能非常慢。
See: 实体框架 - DetectChanges 性能 http://entityframework.net/improve-ef-detect-changes-performance
正如您所注意到的,它将实体一一保存在数据库中,这是非常慢的。
EF扩展
不再支持该库,并且没有批量插入功能。
批量插入库
支持批量插入的主要库有以下三个:
-
实体框架扩展 http://entityframework-extensions.net/ (付费但支持)
-
EntityFramework.BulkInsert https://www.nuget.org/packages/EntityFramework.BulkInsert-ef6/ (不再支持)
-
EFU实用程序 https://www.nuget.org/packages/EFUtilities/ (不再支持)
请注意,两个免费库都不支持所有继承和关联。
免责声明: 我是该项目的所有者实体框架扩展 http://entityframework-extensions.net/
除了批量插入之外,该库还允许您执行所有批量操作:
- 批量保存更改
- 批量插入
- 批量更新
- 批量删除
- 批量合并
- 批量同步
Example:
// Easy to use
context.BulkSaveChanges();
// Easy to customize
context.BulkSaveChanges(bulk => bulk.BatchSize = 100);
// Perform Bulk Operations
context.BulkDelete(customers);
context.BulkInsert(customers);
context.BulkUpdate(customers);
// Customize Primary Key
context.BulkMerge(customers, operation => {
operation.ColumnPrimaryKeyExpression =
customer => customer.Code;
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)