foreach (var item in _context.Duiven.
.Include(p => p.Duivenmelker.VoedselInstelling)
.Include(p => p.VoedselHistoriek)
.Include(p => p.Duivenmelker.Personeel)
.Include("Ziektes.DuifZiekte")
.ToList() // 25.000)
{
item.FoodHistory();
item.HealthSimulation();
item.DiseaseSimulation(diseaseTypes);
item.CureSimulation(_context);
item.DeathSimulation();
item.Feed();
}
_context.SaveChanges()
以上代码循环通过aprox。 25000项。 它会更新这些对象上的各种内容(此过程大约需要10分钟) 问题在于将所有这些更改保存到数据库中,这需要将近2个小时。
它可能会逐个更新(sql)每个更改吗? (这是sql azure) 该过程还包括删除25000条记录和插入25000个新的(4个整数)
我通过包含大量需要来减少对数据库的调用。但我发现这不是过程,而是需要很长时间的节约:S
[更新记录中的所有值]与之间的执行是否存在差异? [删除当前&插入新的??
如何将此保存到数据库?比如10分钟而不是160米?
答案 0 :(得分:3)
实体框架不太适合批量更新。
我遇到了同样的情况,最后重写了我的批量更新逻辑,以便将ADO.Net与存储过程一起使用。对于我的特定用例,性能提升约为10倍。
另一个选项可能是SqlBulkCopy,具体取决于您的具体情况。
答案 1 :(得分:0)
您可以使用一些技巧,例如每100次操作只能提交一次。
但是,我总是不得不回避为数据库操作编写存储过程,这些操作从ORM中执行得太慢。