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

本文关键字:添加 种子 加载 框架 大容量 实体 | 更新日期: 2023-09-27 18:34:54

    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();                  
            }
        });
}

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

PS:可以花50秒进行1000个条目还是我做错了什么。

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

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

你可以直接在数据库上使用sql - 如果你使用的是sql服务器,sql可能是"批量插入"。

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

这里有示例代码和更多信息:如何使用 sql 文件设定数据种子