C# 使用EF在表中插入大量数据

C# 使用EF在表中插入大量数据,c#,sql-server,entity-framework,tsql,C#,Sql Server,Entity Framework,Tsql,我有一个用户表,其中有+100000个用户。 如果我想在另一个带有EF的表中为每个用户创建一行,那么最好的方法是什么 我猜在C#中循环所有用户,并为我的表行项目创建100000实例可能会让我感到遗憾 我是否应该创建一个存储过程?解决这个问题的最好办法是什么 实体框架有一个批量数据插入扩展,请下载并在此处查看文档: 使用NuGet添加它: EF4 PM>安装包EntityFramework.BulkInsert-ef4 EF5 PM>安装包EntityFramework.BulkInsert-

我有一个用户表,其中有+100000个用户。 如果我想在另一个带有
EF
的表中为每个用户创建一行,那么最好的方法是什么

我猜在
C#
中循环所有用户,并为我的表行项目创建100000实例可能会让我感到遗憾


我是否应该创建一个
存储过程
?解决这个问题的最好办法是什么

实体框架有一个批量数据插入扩展,请下载并在此处查看文档:

使用NuGet添加它:

EF4

PM>安装包EntityFramework.BulkInsert-ef4

EF5

PM>安装包EntityFramework.BulkInsert-ef5

EF6

PM>安装包EntityFramework.BulkInsert-ef6
我继续使用乔治的解决方案。一个非常简单的SP,在两秒内插入了102400行

INSERT INTO MyTable (col1 col2, UserID)
SELECT @Param1, @Param2, [ID] FROM [User]

最好的实现方法是Sql Server本身。将其实现为存储过程并通过存储的命令执行。由于更改跟踪和其他原因(我不完全理解),使用EF插入大量数据的速度非常慢。最好的解决方法不是使用EF,在下面的答案中使用批量插入,或者(根据您的观点,最好或最差的解决方案)接受缓慢,让它运行,然后出去喝酒。但这仍然意味着我需要实例化10万个实体以进行批量插入,这可能意味着OutOfMemoryException,对吗?您可以执行单个LINQ查询,从一个数据源中进行选择,然后批量插入到新的数据源中。