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秒才行,或者我做错了。
答案 0 :(得分:1)
每次应用程序启动时,Seed方法都会运行,因此编码它的方式将尝试一遍又一遍地添加FoodWeight
。 EF已提供AddOrUpdate
作为一种方便的方法来防止这种情况,但它实际上不适合批量插入。
你可以直接在数据库上使用sql - 如果你使用的是sql server,那么sql可能是'BULK INSERT'。
我会将sql放在Up迁移中,因为您可能只想从已知状态运行一次插入,并且它避免了担心上下文的效率和跟踪更改等。
此处有示例代码和更多信息:how to seed data using sql files