我一直在处理这个问题2天,我找不到解决方案。改进实体框架插入
using (TaxablePersonContext context = new TaxablePersonContext(this.ConnectionString))
{
context.Configuration.AutoDetectChangesEnabled = false;
foreach(TaxablePerson p in persons) // Persons has always size 1000
{
// TaxablePerson has some other properties e.g. Name, VatId, Street,...
p.RecCreatedBy = "application name";
p.RecCreatedOn = this.SynchronizationStartDateTime;
p.RecModifiedBy = "application name";
p.RecModifiedOn = this.SynchronizationStartDateTime;
p.RecSyncDate = this.SynchronizationStartDateTime;
p.RecActive = true;
}
DateTime start1 = DateTime.Now;
context.TaxablePersons.AddRange(persons);
TimeSpan end1 = DateTime.Now.Subtract(start1);
DateTime start2 = DateTime.Now;
context.SaveChanges();
TimeSpan end2 = DateTime.Now.Subtract(start1);
}
我花了将近10秒来插入1000条记录和98秒来在SQL Server中插入10.000记录。您能否请告知如何改进实体框架插入性能。我阅读这篇文章Fastest Way of Inserting in Entity Framework,并包括本文中提到的技巧,但仍插入非常缓慢。我需要插入260.000条记录,需要52分钟。我插入1000个批次,上面的代码演示。数据从文件中读取,当我打1000个记录时,我会与数据库进行同步。我还可以做些什么?有些人提到使用时设置context.Configuration.AutoDetectChangesEnabled = false;性能从几分钟提高到接近几秒。我错过了什么?我正在使用实体框架6.1.3。
您还应该使用: context.Configuration.ValidateOnSaveEnabled = false; –
@ K.J。谢谢你的设置,但它没有什么区别。 – broadband
在'using':'context.Database.Log = s => Debug.Write(s);'后面添加这段代码''并在'using'结尾检查VS中的Output窗口。可能你会看到奇怪的东西 – Szer