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
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因