SqlBulkCopy和實體框架

.net c# entity-framework sqlbulkcopy

我目前的項目包括3個標準層:數據,業務和演示。我想使用數據實體來滿足我的所有數據訪問需求。應用程序的部分功能是需要將平面文件中的所有數據複製到數據庫中。該文件不是很大,所以我可以使用SqlBulkCopy。我在.NET中找到了幾篇關於SqlBulkCopy類用法的文章。但是,所有文章都使用DataTable來來回移動數據。

有沒有辦法將數據實體與SqlBulkCopy一起使用,還是必須使用DataTables?

專家解答

作為@DaveHogan回答的補充,

現在有了新的庫,它們允許使用數據實體而不是DataTable為Entity Framework執行批量插入(使用SqlBulkCopy)。

免責聲明 :我是項目實體框架擴展的所有者

該庫不是免費的,但可以輕鬆執行:

  • BulkSaveChanges
  • BulkInsert
  • BulkUpdate
  • BulkDelete
  • BulkMerge

在引擎蓋下,使用SqlBulkCopy。使用擴展方法make比為每個批量插入編碼自定義解決方案更容易/更快。

// Easy to use
context.BulkSaveChanges();

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

表現不佳

對不起,你的表現很差,

確保你沒有把時間從一些常見錯誤中包括忘記JIT編譯,使用Add而不是AddRange影響測試性能但與我們的庫無關。

大多數人報告在排除所有常見性能基準測試錯誤時,性能提升了25-50倍。

請參閱: 實體框架擴展 - 基準


熱門答案

您需要將實體轉換為IDataReader或DataTable。

有一個小幫助類,旨在幫助: http//archive.msdn.microsoft.com/LinqEntityDataReader/Release/ProjectReleases.aspx?ReleaseId = 389

編輯:msdn鏈接壞了,可以在這裡找到alt拷貝: https//github.com/matthewschrager/Repository/blob/master/Repository.EntityFramework/EntityDataReader.cs

然後您可以像這樣使用SqlBulkCopy:

var sbCopy= new SqlBulkCopy(connectionString);
sbCopy.DestinationTableName = "TableName";
sbCopy.WriteToServer(entitiesList.AsDataReader()); 


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow