我正在实现一个
Database First Entity Framework 6.1,将大约2000个主/详细信息集合插入sql server db.每个集合大约有2~3个对象.所以要插入的总数或记录是〜5000.事务大约需要2~3min,这是非常慢的.我正在使用以下代码:
public class Collection { [Key] public int Id { get; set; } public string Name { get; set; } ... public List<DetailCol> Details{ get; set; } } public class DetailCol { [Key] public int Id { get; set; } public decimal Lvl { get; set; } public string Type { get; set; } } var MyCollections = new List<Collection>(); // Do population of collection and try to insert to db using (var db = new MyContext(ConnectionString) { // Speed up insert db.Configuration.AutoDetectChangesEnabled = false; // Add new entries to master and details db.MyCollections.AddRange(MyCollections); // Update db db.SaveChanges(); }
有人可以暗示为什么会发生这种情况以及如何改善这种情况?
解决方法
我刚刚经历了同样的事情,并且AddRange()需要几分钟才能在EF 6.1中添加1200条记录,因为当你查看探查器时它一次只执行一次INSERTS,因此Bulkcopy将是你最快的选择.好消息是基本的表插入,您可以通过安装此nuget包使用名为EntityFramework.BulkInsert的扩展:
EFBulkInsert
添加:使用EntityFramework.BulkInsert.Extensions;
然后做这样的事情:
var options = new BulkInsertOptions(); options.BatchSize = 1000; // Default is 5000 efContext.BulkInsert<MyObject>(myList,options); efContext.SaveChanges();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。