2017-01-10 51 views
0

我们在我们的WPF应用程序中使用Microsoft Entity Framework Code First方法。为什么SaveChanges()方法在我的情况下需要这么长时间?

下面的代码:

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(); 

首先通话时间约1秒,第二个几分钟。

基地是 - DbContext类。

这是怎么发生的?

+0

'userActionsToTrack'有多少动作? –

+0

超过6000. – tesicg

+0

尝试'context.Database.Log = Console.Write; '在控制台中编写查询,也许你会在查询中看到奇怪的东西。 –

回答

3

在执行操作之前,请关闭更改跟踪。这会显着提高您的性能(大小顺序)。你的循环之外执行的SaveChanges的()也将节省您大量的时间

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

    //your foreach loop 

    context.SaveChanges(); 
} 

一些更多的信息,请参阅this页。我希望它有帮助,否则让我知道

+0

我已经试过,但没有帮助。 – tesicg

相关问题