我想将100,000多行批量插入表格(其中有一个标识列,每次插入新行时都会自动递增)。
插入性能影响最小的行的最快方法是什么?
插入所有行后,如何获取最近插入的行的ID列表?
注意:我做了以下但我没有得到ids列表
ctx.Documents.AddRange(documentsList);
ctx.SaveChanges();
var ids = documentsList.Select(d => d.Id);
由于
答案 0 :(得分:0)
实体框架中没有Bulk Insert
。您必须使用第三方库来执行此类操作。
默认情况下,Entity Framework将为每个要保存的实体进行数据库往返。因此,您的方案中需要超过100,000次数据库往返, INSANELY 缓慢。
免责声明:我是Entity Framework Extensions
的所有者此库不是免费的,但允许您执行所有批量操作,包括BulkInsert
并自动返回Id's
。您还可以使用IncludeGraph
选项插入相关实体:
实施例
// 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;
});
编辑:回答问题
的所有者与#34; EF Plus"
相同的位
简而言之,我们将免费和付费功能分成两个库。 EF +不支持Bulk Operations
。
两个图书馆目前共享的唯一功能是Batch Delete
和Batch Update