首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用实体框架从csv文件中批量插入

使用实体框架从csv文件中批量插入
EN

Stack Overflow用户
提问于 2016-04-19 17:07:41
回答 2查看 2.3K关注 0票数 3

我想使用实体框架从csv文件批量插入MS SQL Server数据库。是否存在使用实体框架进行批量插入的内置方法?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-04-20 04:06:05

在实体框架中不支持批量插入。如果尝试添加数千个对象,只需将它们添加到DbSet中,然后调用SaveChanges,那么性能就会显著下降。

代码语言:javascript
复制
using(var db = new Db()) 
{
    foreach(var item from data) 
    {
        db.Items.Add(item);
    }
    db.SaveChanges();
}

它之所以发生,是因为EF跟踪,所有,每个对象的变化,导致内存占用大,计算量大。

根据您使用的EF版本和方法,您可以禁用跟踪更改,按100或1000项中相对较小的部分插入对象,这取决于它们的大小和实际性能。然后计算一次更改并保存。例如。

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2016-04-20 17:37:48

正如Yaroslav所评论的,实体框架小组对批量插入没有直接支持,

然而,有3个图书馆支持它:

在这里,您可以找到一篇关于三个库的小文章:实体框架-批量插入

示例:

代码语言:javascript
复制
using (var ctx = new EntitiesContext())
{
    // Do not use the ChangeTracker or require to add the list in the DbSet
    ctx.BulkInsert(list);
}

免责声明:我是项目实体框架扩展的所有者

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36725006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档