I have delete an application in c# and i utilize linq to entities
to build queries in my application. However I find my application to be very slow in adding and deleting records. Delete 500 records would take me about 15 mins. That is too long. my delete query is below.
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();
}
}
My query is rather simple. One row of data does contain about 20 columns. I dont know if that would have an effect. Anyhow, if i can get some expert suggestion, it would be helpful. thank you.
EDITED.
I already had good suggestions based on the delete. One of which is to used context.SaveChanges()
outside of the loop. In my insert, i have similar code (shown below), however I need the record to be save first because i want the ID to use it in another function. In this case, how may i proceed?
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);
}