8個月前在這裏討論了相同的主題:How do I speed up DbSet.Add()?。除了使用SqlBulkCopy,我們還沒有提出解決方案,這是我們不能接受的。我決定再次提出這個問題,希望圍繞這個問題可能會有新的想法和想法,並提出其他解決方法。至少我只是好奇爲什麼這個操作需要很長時間才能運行。爲什麼DbSet.Add的工作速度如此之慢?
嗯,問題是:我必須將30K實體更新到數據庫(EF 4.1,POCO)中。實體類型非常簡單,包含整數Id +其他4個整數屬性,與其他類型無關。 2例:
他們都是新的記錄。運行context.Entities.Add(實體)爲每個實體需要90秒Cntx.Configuration.AutoDetectChangesEnabled = false(真正的值使它永遠運行)。然後SaveChanges只需要一秒鐘。另一種方法:將其連接到上下文這樣採用相同的90秒:
Cntx.Entities.Attach(entity); Cntx.Entry(entity).State = EntityState.Added;
有了一些變化全部是現有的記錄。在這種情況下它只需幾毫秒的時間將其附加到現有數據背景是這樣的:
Cntx.Entities.Attach(entity); Cntx.Entry(entity).State = EntityState.Modified;
看到區別?
Add方法的背後是什麼讓它工作如此慢得令人難以置信呢?
把你的更新作爲一個答案,請。 –
我嘗試了,但是我做不到,需要100個聲望點(9個以上)來自我回答。 – YMC
Upvoted你的問題,現在你有101代表:) – Slauma