2014-01-25 216 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有關於如何做到這一點的信息。