Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向数据库写入海量数据的实体框架_C#_Database_Entity Framework_Linq_Entity Framework 6 - Fatal编程技术网

C# 向数据库写入海量数据的实体框架

C# 向数据库写入海量数据的实体框架,c#,database,entity-framework,linq,entity-framework-6,C#,Database,Entity Framework,Linq,Entity Framework 6,我有一个数据库,其中包括两个数据表:- 表1 产品ID 产品名称 产品描述 可见 删除 表2 -产品价格ID -产品ID -位置ID -价格 表2可以包含表1中每个产品在不同位置的许多价格。我读的是一个CSV文件,其中第一列列出了产品详细信息,然后是15个位置的15列价格值 我发现,每次大约有10000种产品被导入,通过先写入产品,然后将15种价格的列表写入表2中,将此文件写入数据库,超过10000倍,导入速度大大减慢。与“试图”先列出10000种产品,然后列出大约132000种产品的价格相比,

我有一个数据库,其中包括两个数据表:-

表1

产品ID 产品名称 产品描述 可见 删除 表2 -产品价格ID -产品ID -位置ID -价格

表2可以包含表1中每个产品在不同位置的许多价格。我读的是一个CSV文件,其中第一列列出了产品详细信息,然后是15个位置的15列价格值

我发现,每次大约有10000种产品被导入,通过先写入产品,然后将15种价格的列表写入表2中,将此文件写入数据库,超过10000倍,导入速度大大减慢。与“试图”先列出10000种产品,然后列出大约132000种产品的价格相比,它的速度慢了2.5倍。对数据库进行2次写入可以大大加快整个过程,因为数据库会产生延迟时间,因此写入2次而不是20000次要容易得多

我已经为每个对象创建了数据库类型列表,并向每个对象添加了数据,这很好。问题是表2中的ProductID。实体框架在我调用

context.Products.Add(productList);
context.Save();
但在保存时,已经创建了产品价格列表,但没有相关的ProductID值。当它保存时,由于外键约束而崩溃

Entity Framework是否可以获取ProductID,而无需先将每个产品写入数据库即可分配给此产品?在这里,数据库调用的最少数量至关重要


我可以选择重新解析文件中的所有数据,但我也不热衷于此,因为这需要额外的处理时间。文件的结构将无法更改。

我权衡了所有选项,结果证明最好的方法是将所有产品写入一个列表,将所有产品价格以及已知产品代码写入另一个列表

然后,我们将产品列表保存到数据库中,然后在将产品价格列表保存到数据库之前,对这些产品进行迭代,根据与本地列表匹配的产品代码返回ProductID

2次保存到数据库,一次来自数据库的调用,我们将47分钟的数据导入时间缩短为3分钟


谢谢大家的帮助

您可以查看批量插入软件包,非常感谢您的建议!我一到某个地方就会发布答案。