2016-09-04 40 views
2

我目前在玩EntityFramework.BulkInsertC#&EF:bulkinsert相關對象

雖然它確實有助於簡化插入操作(具有1.000.000行的16秒),但我找不到任何有關插入映射到多個表的映射對象的信息。與此相關的唯一事情是官方網站的舊版(2014年)話題,指出這是不可能的。這仍然是實際的嗎?

如果是這樣的話:有沒有什麼好的解決方法?

+0

不幸的是....是的。一個alternatve將是批量插入擴展,並在同一事務中手動更新所有內容。 – ESG

回答

1

EntityFramework.BulkInsert是一個非常好的庫,它支持簡單的場景。但是,圖書館是有限的,不再支持。

到目前爲止,只有一個很好的解決方法,它使用一個支持一切的庫!

免責聲明:我的項目Entity Framework Extensions

該庫支持的一切,包括所有關聯和繼承的所有者。

例如,爲了將多個實體保存在不同的表格中,您可以使用BulkSaveChanges,它們的工作方式與SaveChanges完全相同,但速度更快!

// Easy to use 
context.BulkSaveChanges(); 

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

該庫也做不止插入。它支持所有的批量操作:

  • BulkInsert
  • BulkUpdate
  • BulkDelete
  • BulkMerge

但是不像EntityFramework.BulkInsert,該庫是不是免費的。

編輯:答案subquestion

你說的方法快 - 你有任何的指標或指標

@馬克的鏈接:你可以看一下指標在我們的網站homepage。我們報告BulkSaveChanges至少比SaveChanges快15倍。

但是,度量標準存在很大偏差。太多的東西可能會影響它,如索引,觸發器,延遲等!

人們通常會將我們的表現提升25倍,50倍,80倍!

在執行基準測試時,人們通常會忘記的一件事是在測試JIT編譯之前調用我們的庫一次!像實體框架一樣,圖書館的第一次訪問可能需要幾ms。

+0

你說*方式更快* - 你有任何指標或指標的鏈接?只是好奇 –

1

如果我有一個批量插入問題,我不會使用EF。 EF旨在在應用程序的正常使用情況下映射表示實體的對象,其中任何給定的事務只應觸及一個實體(假設您的實體是圍繞明智的一致性邊界進行設計的)。

如果我移動大量數據(導入/導出/轉換等),那麼我會更直接地使用SQL,在那裏我有更多的控制。