在SQL Server中插入批量记录

3
有人可以告诉我如何在事务下批量插入数据到SQL Server中吗?我有一个程序从文件导入数据到数据库的多个表中。我使用SQL Server和Entity Framework在事务下将这些记录导入到数据库中,请问这是好的方法吗?
我正在使用Entity Framework来完成此操作。但当我导入1000条记录时,我发现它会在SQL Server上造成锁。
文件包含许多列。一些列属于父表,其余列属于子表。那么我们如何使用SqlBulkCopy将它们映射起来呢?
有10个子表。我需要先将数据从文件插入到子表中。如果插入某些原因导致子表记录出错,我必须回滚该事务并继续使用文件中的另一条记录。

Entity Framework 对于大量插入数据来说并不理想,因为速度原因 - SqlBulkCopy 会更快。但是,即使是批量复制组件也会在您的数据库表上使用锁定!这是无法避免的! - marc_s
2个回答

2

今天我找到了一个很好的批量插入库:EntityFrameworkETL

PM> Install-Package EntityFrameworkETL

项目描述 Entity Framework ETL 用于使用现有的 DbContext 批量执行命令。在将数据从生产环境移动到开发环境时非常有用。

示例用法

ETL = new EntityFrameworkETL.ETL(() => new DataContext("name=source"), () => new DataContext("name=target"));
ETL.DeleteAll<Person>();
ETL.BatchInserts<Person>(100, true, x => x.Include("Jobs").Where(y=> y.Age > 65 && y.IsRetired));

请提供一些关于使用和功能的描述,以便我能够高效地使用它。 - Sonu
这个 entityframeworketl.codeplex.com 目前还没有文档。 - Sonu
同一行代码也可以在CodePlex上找到。但它不符合我的实际需求。因为我需要针对文件的每一行,首先选择几列数据将其插入到子表中。然后,如果子表中的记录成功插入,则需要将行中的几个列插入到父表中。 - Sonu
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/46060/discussion-between-sonu-and-shahrooz-jefri- - Sonu
如果出现任何问题,我们必须回滚并继续处理下一条记录。 - Sonu
糟糕,现在我发现这个了。我自己编写了一个版本。顺便说一下,它运行得相当不错(尽管它非常啰嗦)。 - dudeNumber4

0
这种操作最好作为存储过程来实现。否则,你将会有多次 SQL 调用。
基本上,你需要创建一个接受用户定义类型并对传递的数据进行操作的存储过程。
这篇文章提供了一些关于如何实现这个功能的信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接