C# 实体框架批量加载太慢添加种子 protected override void Seed(Fitlife.Domain.Concrete.EFDBContext) { List foodweights=getline(basePath+foodweights.txt); int计数器=0; foodweights.ForEach(行=> { FoodWeights newVal=新的FoodWeights() { FoodCode=int.Parse(第[0]行), PortionCode=int.Parse(第[1]行), PortionWeight=decimal.Parse(第[2]行) }; context.FoodWeights.Add(newVal); 如果(++计数器==1000) { 计数器=0; SaveChanges(); } }); }
上面的方法用于填充我的数据库。但是1000个条目需要50秒我有一个包含470k个条目的文件,如何提高性能我使用的是entity framework,当我这样做时会调用这个方法 PM>更新数据库 使用包管理器。我需要类似的功能,我是非常新的asp.net和实体框架的任何指导将不胜感激C# 实体框架批量加载太慢添加种子 protected override void Seed(Fitlife.Domain.Concrete.EFDBContext) { List foodweights=getline(basePath+foodweights.txt); int计数器=0; foodweights.ForEach(行=> { FoodWeights newVal=新的FoodWeights() { FoodCode=int.Parse(第[0]行), PortionCode=int.Parse(第[1]行), PortionWeight=decimal.Parse(第[2]行) }; context.FoodWeights.Add(newVal); 如果(++计数器==1000) { 计数器=0; SaveChanges(); } }); },c#,entity-framework,bulk-load,C#,Entity Framework,Bulk Load,上面的方法用于填充我的数据库。但是1000个条目需要50秒我有一个包含470k个条目的文件,如何提高性能我使用的是entity framework,当我这样做时会调用这个方法 PM>更新数据库 使用包管理器。我需要类似的功能,我是非常新的asp.net和实体框架的任何指导将不胜感激 PS:花50秒处理1000个条目可以吗,还是我做错了什么。种子方法在每次应用程序启动时都会运行,因此您编码它的方式将尝试一次又一次地添加FoodWeights。EF提供了AddOrUpdate作为一种方便的方法来防止
PS:花50秒处理1000个条目可以吗,还是我做错了什么。种子方法在每次应用程序启动时都会运行,因此您编码它的方式将尝试一次又一次地添加
FoodWeight
s。EF提供了AddOrUpdate
作为一种方便的方法来防止这种情况,但它确实不适合批量插入
您可以直接在数据库上使用sql—如果您使用的是sql server,则sql可以是
我会将sql进行上迁移,因为您可能只想从已知状态运行insert一次,并且它避免了担心上下文的效率和跟踪更改等问题
这里有示例代码和更多信息:每次应用程序启动时,Seed方法都会运行,因此您对其进行编码的方式将尝试一次又一次地添加
FoodWeight
s。EF提供了AddOrUpdate
作为一种方便的方法来防止这种情况,但它确实不适合批量插入
您可以直接在数据库上使用sql—如果您使用的是sql server,则sql可以是
我会将sql进行上迁移,因为您可能只想从已知状态运行insert一次,并且它避免了担心上下文的效率和跟踪更改等问题
这里有示例代码和更多信息:不幸的是,EF不能很好地处理批处理/批量作业。我只想使用,它是为批量插入而设计的。你能给我提供一些例子吗?我可以在种子函数中使用sqlbulkcopy,我希望仍然能够使用包管理器命令,比如PM>update Database FoodWeights.txt包含多少条记录?我知道你每节省1000行。看起来它仍然会在整个文件中循环,如果FoodWeights.txt是一个大文件,这可能需要相当长的时间。我只想使用,它是为批量插入而设计的。你能给我提供一些例子吗?我可以在种子函数中使用sqlbulkcopy,我希望仍然能够使用包管理器命令,比如PM>update Database FoodWeights.txt包含多少条记录?我知道你每节省1000行。看起来它仍然会在您的整个文件中循环,如果FoodWeights.txt是一个大文件,这可能需要相当长的时间。感谢您提供的提示,我使用了SqlBulkInsert及其快速功能,我会将种子放入向上迁移,但我重写的种子函数的目的是什么,它是否方便。我在这个答案上发布了更多信息-有更多阅读的链接谢谢你的提示,我使用了SqlBulkInsert及其快速功能,我会将种子放入上迁移,但是我重写的种子函数的目的是什么,它是否方便。我在这个答案上发布了更多信息-有更多阅读的链接
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();
}
});
}