1

我需要向数据库插入大量数据sqlite
我用Linq to Entities.

我在添加大量数据1M+时遇到问题。
内存不够或时间很长。

此代码 - 速度快,但需要大量内存:

// query - IQueryable of DbfRecord
// db - ObjectContext
int i = 0;
foreach (var item in query) {
    db.AddToKladrs(new Kladr() {
        Id = item.GetField(0),
        ParentId = item.GetField(1),
        RegionId = item.GetField(3),
        Name = item.GetField(2),
        Index = item.GetField(4)
    });
    if(++i % 4000 == 0)
        db.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
}


这段代码 - 不是资源密集型,但非常慢

// query - IQueryable of DbfRecord
// db - ObjectContext
foreach (var item in query) {
    db.ExecuteStoreCommand("insert into [Kladr] values({0}, {1}, {2}, {3}, {4})",
        item.GetField(0),
        item.GetField(1),
        item.GetField(3),
        item.GetField(2),
        item.GetField(4)
    );
}

我错过了 try-catch 构造和幽灵类型。

帮我找到最好的解决方案!

4

1 回答 1

1

您可以使用SqlBulkCopy复制大量数据。没有用 SQL lite 尝试过,但它应该可以工作。

链接 1
链接 2

更新 :

这是 Marc Gravell 的一个很好的答案。如何做批量插入 linq 到实体

于 2011-07-17T15:55:54.563 回答