2014-01-25 177 views
4

有谁可以告诉我如何在事务下批量插入数据到SQL Server中吗?我有一个程序将数据从文件导入数据库的多个表中。我正在使用SQL Server和实体框架将这些记录导入到事务下的数据库中。请告诉我是否遵循的好方法?在SQL Server中插入批量记录

我正在为此使用实体框架。但是当我导入1000条记录时,我发现它导致SQL Server上的锁定。

该文件包含许多列。很少的列属于父表,其余的列属于子表。那么我们如何使用SqlBulkCopy来映射它们呢?

有10个子表。我需要先将文件中的数据插入到子表中。如果插入记录导致子表错误一些什么原因,我将不得不回滚事务,并从文件的另一个记录继续

+0

由于**速度的原因,实体框架不适合批量插入**'SqlBulkCopy'会更快。 **但是**即使是大容量拷贝组件**也会在你的数据库表上使用**锁!没有办法! –

回答

2

今天,我发现了批量插入一个好的图书馆:EntityFrameworkETL

PM> Install-Package EntityFrameworkETL 

项目说明 实体框架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)); 
+0

请给出一些关于使用和它的能力的描述,以便我可以有效地使用它。 – Sonu

+0

@Sonu您可以去该网站,并获得更多的信息 –

+0

@Sonu https://entityframeworketl.codeplex.com/ –

0

这种类型的操作将工作最好为存储过程的。否则,你会多次返回SQL调用。

基本上你创建一个接受用户定义类型的存储过程,并对传递的数据进行操作。

This post有关于如何做到这一点的信息。