2017-01-26 102 views
0

我正在尋找一種方法來使用EF6插入或更新大約155,000條記錄。顯而易見的是,開箱即用的EF6將花費很長時間來查找記錄並決定它是插入還是更新,創建或更新對象,然後將其提交到數據庫。用EF6批量插入/更新?

環顧四周我看到第三方應用程序,如EntityFramework.Extend,但它看起來像他們被設計來做大規模更新,如「更新表,其中字段=值」,這不太適合我期待做的。

在我的情況下,我讀了一個XML文檔,從該文檔創建一個對象列表,然後使用EF插入或更新到表。回到常規的ADO.Net並使用批量插入是否會更好?

順便說一句:這是使用Oracle數據庫,而不是SQL Server。

回答

0

您可以使用EntityFramework.BulkInsert-ef6包:

using EntityFramework.BulkInsert.Extensions; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var data = new List<Demo>(); 
     for (int i = 0; i < 1000000; i++) 
     { 
      data.Add(new Demo { InsertDate = DateTime.Now, Key = Guid.NewGuid(), Name = "Example " + i }); 
     } 
     Stopwatch sw = Stopwatch.StartNew(); 
     using (Model1 model = new Model1()) 
     { 
      sw.Start(); 
      model.BulkInsert(data); 
      sw.Stop(); 
     } 
     Console.WriteLine($"Elapsed time for {data.Count} rows: {sw.Elapsed}"); 
     Console.ReadKey(); 
    } 
} 

我的本地硬盤驅動器上運行這給

Elapsed time for 1000000 rows: 00:00:24.9646688

附:軟件包提供商聲稱此版本的大容量軟件包已過時。無論如何,這符合我多年來的需求,作者提出的軟件包不再是免費的。

+0

該軟件包不支持此問題所需的Oracle。是的,即使SQL Server已過時,該包也可以工作,但不支持所有的繼承和關聯。這就是爲什麼我現在離開了最新版本(我是軟件包的所有者) –

0

如果你正在尋找一個「免費」的方式來做到這一點,我建議你回到ADO.NET並使用Array Bindings,這是我在我的庫下做的。

免責聲明:我的Entity Framework Extensions

該庫支持所有主要供應商,包括甲骨文

  • 甲骨文DevArt
  • 的Oracle數據訪問
  • 甲骨文DataAccessManaged
主人

這個庫可以讓你執行你需要爲你的場景的所有批量操作:

  • 散裝的SaveChanges
  • 容量插入
  • 批量刪除
  • 批量更新
  • 批量合併

示例

// Easy to use 
context.BulkSaveChanges(); 

// Easy to customize 
context.BulkSaveChanges(bulk => bulk.BatchSize = 100); 

// Perform Bulk Operations 
context.BulkDelete(customers); 
context.BulkInsert(customers); 
context.BulkUpdate(customers); 

// Customize Primary Key 
context.BulkMerge(customers, operation => { 
    operation.ColumnPrimaryKeyExpression = 
     customer => customer.Code; 
}); 

這個庫將使您節省大量的時間,而無需製作任何ADO.NET!

+1

我看到了這個擴展,但記得過去它不支持Oracle,這就是爲什麼我提到我在使用它。不幸的是,我必須回到ADO.Net,因爲在這裏購買第三方軟件幾乎是不可能的。爲了獲得最初的批准,我必須跳過這些環節,然後軟件將不得不通過合規審批。這可能需要至少一個月才能得到它,說實話,我可能會拒絕的價格,但至少我得到了回到ADO.Net的答案。謝謝... – Caverman

+0

是的,這是不幸的,有時很難帶來一些公司的工具:(我知道這種感覺和複雜性,以提出這樣的要求!如果你需要陣列綁定的幫助,請不要猶豫,問。 –