Mav*_*415 0 c# linq database linq-to-entities
我在c#中删除了一个应用程序,我利用linq to entities它在我的应用程序中构建查询.但是我发现我的应用程序在添加和删除记录时非常慢.删除500条记录大约需要15分钟.那太久了.我的删除查询如下.
public void deletePayrollBatch(int batchNo) 
{
          var context = new DataSources.sspEntities();
          var query1 = (from a in context.Payroll_Details
                        where a.Payroll_BatchBatch_no == batchNo
                        select a).ToList();
           foreach (var x in query1) 
           {
                context.DeleteObject(x);
                context.SaveChanges();
           }
}
我的查询相当简单.一行数据确实包含大约20列.我不知道这是否会产生影响.无论如何,如果我能得到一些专家建议,那将会有所帮助.谢谢.
编辑.
基于删除,我已经有了很好的建议.其中之一是context.SaveChanges()在循环之外使用.在我的插入中,我有类似的代码(如下所示),但我需要首先保存记录,因为我希望ID在另一个函数中使用它.在这种情况下,我该怎么办?
foreach (var xyz in x)
{
   Try{
          pDetails1.EstateID = 143;
          pDetails1.Employee_Personal_InfoEmp_id = xyz.PD_EmpPersonal_Id;
          pDetails1.PAYE = (decimal)xyz.PD_PAYE.GetValueOrDefault();
          pDetails1.PAYE_YTD = (decimal)PayeYTD.GetValueOrDefault();
          pDetails1.Basic_Pay = (decimal)xyz.PD_BasicPay.GetValueOrDefault();
          pDetails1.Basic_Pay_YTD = (decimal)basicpay_YTD.GetValueOrDefault();
          pDetails1.Gross_Pay = (decimal)xyz.PD_GrossPay.GetValueOrDefault();
          pDetails1.Gross_Pay_YTD = (decimal)GrossPay_YTD.GetValueOrDefault();
          context.SaveChanges();
          Functions.RandomFunct rf = new RandomFunct();
          rf.AdditionalEarningsIsContinuous(xyz.PD_EmpPersonal_Id); // I NEED THE ID IN ORDER TO RUN THIS FUNCTION. IN THIS CASE I HAVE TO SAVE ON EACH ELEMENT IN THE FOR EACH LOOP??
    }
    catch (exeception e)
        debug.writeline(e.message);
    }
你正在呼唤context.SaveChanges每一条记录.你可以在foreach循环结束时执行一次.
foreach (var x in query1)
{
   context.DeleteObject(x);
}
context.SaveChanges();
这将把删除一次的请求发送到数据库以获取所有记录.目前,您正在发送DELETE每条记录的请求,这需要时间.