实体框架批量加载太慢添加种子

时间:2013-10-10 21:35:01

标签: c# entity-framework bulk-load

    protected override void Seed(Fitlife.Domain.Concrete.EFDBContext context)
    {
        List<List<string>> foodweights = GetLines(basePath + "FoodWeights.txt");
        int counter = 0;
        foodweights.ForEach(line =>
        {
            FoodWeights newVal = new FoodWeights()
            {
                 FoodCode = int.Parse(line[0]),
                  PortionCode = int.Parse(line[1]),
                 PortionWeight = decimal.Parse(line[2])
            };
            context.FoodWeights.Add(newVal);

            if (++counter == 1000)
            {
                counter = 0;
                context.SaveChanges();                  
            }
        });
}

上面的方法用于填充我的数据库。但是1000条目需要50秒我有一个470k条目的文件,我如何提高性能我使用实体框架,当我这样做时调用这个方法 PM&GT;更新数据库 与包管理器。我需要类似的功能,我是asp.net和实体框架的新手,任何指导都将不胜感激。

PS:1000个条目需要花50秒才行,或者我做错了。

1 个答案:

答案 0 :(得分:1)

每次应用程序启动时,Seed方法都会运行,因此编码它的方式将尝试一遍又一遍地添加FoodWeight。 EF已提供AddOrUpdate作为一种方便的方法来防止这种情况,但它实际上不适合批量插入。

你可以直接在数据库上使用sql - 如果你使用的是sql server,那么sql可能是'BULK INSERT'

我会将sql放在Up迁移中,因为您可能只想从已知状态运行一次插入,并且它避免了担心上下文的效率和跟踪更改等。

此处有示例代码和更多信息:how to seed data using sql files