我在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);
}
答案 0 :(得分:7)
您正在为每条记录调用context.SaveChanges
。您可以在foreach
循环结束时执行此操作。
foreach (var x in query1)
{
context.DeleteObject(x);
}
context.SaveChanges();
这会将删除一次的请求发送到数据库以获取所有记录。目前,您正在为每条记录发送DELETE
请求,这需要时间。