在不锁定数据库的情况下保存EF中的许多更改的最佳方法

时间:2012-08-22 12:49:21

标签: sql-server entity-framework

我有几个服务使用Entity Framework来保存数据库中的许多更改。

当它们在IIS中执行时,它会非常快,但是当我处于调试模式并在我的开发计算机上运行它需要几分钟时间,我发现所有其他查询都崩溃了(即使它们不在我正在更新的同一张桌子上。

所以我以为我不会按照我应该的方式做到这一点8 - )

我的代码是这样的:

public void CancelOrders(ObservableCollection<long> idOrders)
    {
        Model.Entities context = new Model.Entities();

        var query = from orders in context.ORDERS.Include("CUSTOMERS")
                    where idOrders.Contains(orders.id_order)
                    select orders;

        foreach (var order in query)
        {
            foreach (var customer in order.CUSTOMERS)
            {
                customer.served = false;
            }
            context.ORDERS.DeleteObject(order);
        }

        context.SaveChanges();

    }

当它运行context.SaveChanges()时会出现问题...它使用大约2000行并且需要一段时间才能完成(同时NOBODY可以使用相同的数据库)。

我应该制作更多frecuent context.SaveChanges()???我可以使用不同的方法吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

如果您不需要将删除设置为transasctional,那么您可以通过将SaveChanges()添加到外部foreach循环的末尾或内部和外部来更频繁地调用foreach

我怀疑您至少要删除订单并将客户更新为交易,所以我建议只将其放在外{{1}}循环中。