C# 在SQL Server中插入批量记录

C# 在SQL Server中插入批量记录,c#,asp.net,sql-server-2008,entity-framework,asp.net-mvc-4,C#,Asp.net,Sql Server 2008,Entity Framework,Asp.net Mvc 4,有人能告诉我如何在事务下将数据批量插入SQL Server吗?我有一个程序将数据从一个文件导入数据库的多个表中。我正在使用SQL Server和实体框架将这些记录导入事务下的数据库。请告诉我这是个好办法吗 我正在为此使用实体框架。但当我导入1000条记录时,我发现它会导致SQL Server上的锁 该文件包含许多列。少数列属于父表,其余列属于子表。那么,我们如何使用SqlBulkCopy映射它们呢 有10个子表。我需要先将数据从文件插入子表。如果插入记录导致子表中出现错误,出于什么原因,我将不得

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

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

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


有10个子表。我需要先将数据从文件插入子表。如果插入记录导致子表中出现错误,出于什么原因,我将不得不回滚该事务并继续使用文件中的另一条记录今天我找到了一个适合大容量插入的库:

项目说明 实体框架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));
ETL=newentityframeworketl.ETL(()=>newdatacontext(“name=source”),()=>newdatacontext(“name=target”);
ETL.DeleteAll();
ETL.BatchInserts(100,true,x=>x.Include(“作业”)。其中(y=>y.Age>65&&y.IsRetired));

这种类型的操作作为存储过程最有效。否则,将返回多个SQL调用

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


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

请提供一些关于使用及其功能的说明,以便我能有效地使用它。此entityframeworketl.codeplex.com没有文档。codeplex上也有一些代码行。但它不符合我的实际要求。当我为文件的每一行编写代码时,我需要首先在子表中插入数据,方法是在行中选择几列。然后,如果记录成功地插入到子表中,那么我需要在父表中插入几行。让我们来看看,如果出现任何问题,我们必须回滚。继续下一条记录。由于速度的原因,实体框架不适合批量插入-
SqlBulkCopy
将更快。但即使是大容量复制组件也会在数据库表上使用锁!没办法!
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));