我想使用实体框架从csv文件批量插入MS SQL Server数据库。是否存在使用实体框架进行批量插入的内置方法?
谢谢
发布于 2016-04-20 04:06:05
在实体框架中不支持批量插入。如果尝试添加数千个对象,只需将它们添加到DbSet中,然后调用SaveChanges,那么性能就会显著下降。
using(var db = new Db())
{
foreach(var item from data)
{
db.Items.Add(item);
}
db.SaveChanges();
}它之所以发生,是因为EF跟踪,所有,每个对象的变化,导致内存占用大,计算量大。
根据您使用的EF版本和方法,您可以禁用跟踪更改,按100或1000项中相对较小的部分插入对象,这取决于它们的大小和实际性能。然后计算一次更改并保存。例如。
int count = 100;
using (var db = new BloggingContext())
{
data.Configuration.AutoDetectChangesEnabled = false;
foreach (var item in data)
{
db.Items.Add(item);
--count;
if(count <= 0)
{
count = 100;
db.SaveChanges();
}
}
db.SaveChanges(); // To make sure we save everything if the last part was smaller than 100
}此外,支持批量插入的库很少。例如:https://github.com/loresoft/EntityFramework.Extended
发布于 2016-04-20 17:37:48
正如Yaroslav所评论的,实体框架小组对批量插入没有直接支持,
然而,有3个图书馆支持它:
在这里,您可以找到一篇关于三个库的小文章:实体框架-批量插入
示例:
using (var ctx = new EntitiesContext())
{
// Do not use the ChangeTracker or require to add the list in the DbSet
ctx.BulkInsert(list);
}免责声明:我是项目实体框架扩展的所有者
https://stackoverflow.com/questions/36725006
复制相似问题