实体框架大容量加载太慢添加种子
本文关键字:添加 种子 加载 框架 大容量 实体 | 更新日期: 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 文件设定数据种子