Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 保存EF中的许多更改而不锁定DB的最佳方法_Sql Server_Entity Framework - Fatal编程技术网

Sql server 保存EF中的许多更改而不锁定DB的最佳方法

Sql server 保存EF中的许多更改而不锁定DB的最佳方法,sql-server,entity-framework,Sql Server,Entity Framework,我有几个服务使用实体框架来保存数据库中的许多更改 当它们在IIS中执行时,运行速度非常快,但当我处于调试模式并在开发计算机上运行它时,需要几分钟的时间,我看到所有rest查询都会崩溃(即使它们不是在我正在更新的同一个表上) 所以我认为我没有按我应该的方式来做8-) 我的代码是这样的: public void CancelOrders(ObservableCollection<long> idOrders) { Model.Entities context =

我有几个服务使用实体框架来保存数据库中的许多更改

当它们在IIS中执行时,运行速度非常快,但当我处于调试模式并在开发计算机上运行它时,需要几分钟的时间,我看到所有rest查询都会崩溃(即使它们不是在我正在更新的同一个表上)

所以我认为我没有按我应该的方式来做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();

    }
public void CancelOrders(可观察到的集合idOrders)
{
Model.Entities上下文=新的Model.Entities();
var query=来自context.orders.Include(“客户”)中的订单
其中idOrders.Contains(orders.id\u order)
选择订单;
foreach(查询中的变量顺序)
{
foreach(订单中的var客户。客户)
{
customer.served=false;
}
context.ORDERS.DeleteObject(order);
}
SaveChanges();
}
当它运行context.SaveChanges()时会出现问题。。。它过去大约有2000行,需要一段时间才能完成(同时,没有人可以使用相同的数据库)

我是否应该创建更频繁的上下文。SaveChanges()???我可以使用不同的方法吗


提前感谢。

如果您不需要将删除作为跨操作,那么您可以更频繁地调用
SaveChanges()
,方法是将其添加到外部
foreach
循环或内部和外部循环的末尾


我怀疑您至少希望删除订单并将客户更新为事务性的,因此我建议只将其放在外部
foreach
循环中。

谢谢您的回答。如果我更频繁地调用SaveChanges()。。。数据库会被锁定吗???或者SQL Server将能够同时回答其他查询???谢谢:-)@zapico:由于
SaveChanges
创建的事务,表被锁定。因为您的批处理会更小,事务会更短,数据库将能够使用它们之间受影响的表响应查询。好的,我将尝试每100个“客户”更改一次事务,因为这是真正的“大问题”;-)。非常感谢。