实体框架性能优化

时间:2016-09-09 22:07:39

标签: c# sql-server entity-framework entity

另一个EF性能问题......我有一个XLSX文件,我正在处理并将记录从中插入数据库。问题是XLSX数据是非规范化的,我必须在数据库中对其进行规范化,这意味着在处理时会进行大量的数据库调用。所以我有一个主循环,它通过XLSX,然后在数据库中检查记录是否已经存在。它是这样的:

List<MainEntity> mainEntities= new List<MainEntity>();

for (int xlsIowIterator = 2; xlsIterator <= 300; xlsIterator++) {
    MainEntity mainEntity = new MainEntity();
    mainEntity.data1 = XLSData1;
    mainEntity.data2 = XLSData2;
    RelatedEntity relatedEntity= repository.FindSingleBy(x => x.MyId.Equals(data));
    mainEntity.RelatedEntity = relatedEntity;
    mainEntities.Add(mainEntity);
}
mainEntities.ForEach(s => context.MainEntities.Add(s));
context.SaveChanges();

保存更改很好 - 问题在于从存储库到for循环中的数据库的调用:

RelatedEntity relatedEntity= repository.FindSingleBy(x => x.MyId.Equals(data));

对于XLSX文件的每个记录,我正在查询数据库并且它会导致性能下降。 300条记录需要大约一分钟来处理,我还有其他需要检索并附加到主实体的相关实体......有没有办法优化这种方法,或者我应该放弃实体框架并将此功能移至数据库端的存储过程?我真的想保留业务层中的所有逻辑,但我将处理数千条记录并等待超过10分钟才能完成一个页面是荒谬的。我正在考虑批量加载表中的整个Excel文件,然后编写存储过程来处理它... 任何帮助/见解都非常感谢!谢谢!

0 个答案:

没有答案