2017-01-10 2 views
0

Wir verwenden den Microsoft Entity Framework Code First Ansatz in unserer WPF-Anwendung.Warum dauert die SaveChanges() Methode in meinem Fall so lange?

Hier ist der Code:

int mainResult = base.SaveChanges(); 

foreach (var action in userActionsToTrack) 
{ 
    var guid = action.EntityGuid; 
    ITrackableEntity entity; 
    if (addedEntities.TryGetValue(guid, out entity)) 
     action.EntityId = entity.Id; 

    Entry(action).State = EntityState.Added; 
} 

base.SaveChanges(); 

Erster Aufruf dauert ca. 1 Sekunde und zweite mehrere Minuten.

Die Basis ist - DbContext-Klasse.

Warum passiert das?

+0

Wie viele Aktionen hat 'userActionsToTrack'? –

+0

Mehr als 6000. – tesicg

+0

Probieren Sie 'context.Database.Log = Console.Write; Um Ihre Abfrage in der Konsole zu schreiben, sehen Sie vielleicht etwas Seltsames in der Abfrage, die generiert wird. –

Antwort

3

Deaktivieren Sie die Änderungsverfolgung, bevor Sie Ihre Operationen ausführen. Dies wird Ihre Leistung erheblich verbessern (Größenordnungen). Durchführen Ihrer Savechanges() außerhalb der Schleife werden Sie auch viel Zeit sparen

using (var context = new yourcontext()) 
{ 
    context.Configuration.AutoDetectChangesEnabled = false; 

    //your foreach loop 

    context.SaveChanges(); 
} 

this Seite für einige weitere Informationen. Ich hoffe es hilft, sonst lassen Sie es mich wissen

+0

Das habe ich schon ausprobiert, hilft aber nicht. – tesicg

Verwandte Themen