实体框架将大量数据写入数据库
本文关键字:数据库 数据 框架 实体 | 更新日期: 2023-09-27 18:12:37
我有一个数据库,其中包括两个数据表:-
表1- ProductID
- ProductName
- ProductDescription
- IsVisible
- IsDeleted
——ProductPriceID——ProductID——LocationID——价格
表2可以保存表1中每个产品在不同位置的价格。我正在读取一个CSV文件,其中产品详细信息列在第一列,后面是15列的15个位置的价格值。
我发现,每次导入将近10,000种产品,如果将该文件写入数据库,首先写入产品,然后将包含15种价格的列表写入表2,那么10000次以上将大大降低导入速度。与"尝试"先写入包含10000种产品的列表,然后再写入大约132000种产品的价格相比,它的速度降低了2.5倍。对数据库进行两次写操作大大加快了整个过程,因为数据库产生了延迟时间,所以写2次而不是20,000次要容易得多。
我已经为每个对象创建了数据库类型的列表,并向每个对象添加了数据,这很好。问题是表2中的ProductID。实体框架不会返回这个,直到我调用
context.Products.Add(productList);
context.Save();
但是在保存时,已经创建了产品价格列表,但是没有相关的ProductID值。当它保存时,由于外键约束而崩溃。
是否有实体框架获得ProductID,这将被分配给此产品而不首先将每个产品写入数据库?最小的数据库调用次数在这里是至关重要的。
我可以选择重新解析文件中的所有数据,但我也不热衷于此,因为它的额外处理时间。
我权衡了所有的选择,结果发现最好的方法是把所有的产品写在一个列表中,把所有的产品价格和已知的产品代码写在另一个列表中。
然后将产品列表保存到数据库中,然后遍历这些产品,根据与本地列表匹配的product Code返回ProductID,然后将产品价格表保存到数据库中。
2次保存到数据库,一次从数据库调用,我们将47分钟的数据导入减少到3分钟。
谢谢大家的帮助!