I am saving the records in an Observable collection to a table using Entity Frameworks 6.0.2 below is the code
foreach(var item in obcollection)
{
cid=InsertClaimsInfoes;
}
private long InsertClaimsInfoes()
{
using (OptimusEntities opt = new OptimusEntities())
{
var x = cc.Provider.Split(',')[1];
var patf = cc.PatientName.Split(',')[1];
var patl = cc.PatientName.Split(',')[0];
var z = opt.Providers.Where(i => i.ProviderFirstName.ToLower().Trim() == x.ToLower().Trim()).FirstOrDefault().Id;
ClaimsInfo _claimInfo = new ClaimsInfo();
{
_claimInfo.Id = Convert.ToInt64(opt.ClaimsInfoes.Max(i => i.Id) + 1);
_claimInfo.BatchID = 1;
_claimInfo.ClientID = 122;
_claimInfo.PayorID = 0;
_claimInfo.ReceiverProviderId = opt.Providers.Where(i =>
i.ProviderFirstName.ToLower().Trim() == x.ToLower().Trim()).FirstOrDefault().Id;
_claimInfo.ServiceProviderId = _claimInfo.ReceiverProviderId;
_claimInfo.SubscriberId = _claimInfo.ReceiverProviderId;
_claimInfo.PatientId = opt.Patients.Any(i => i.FirstName.ToLower().Trim() == patf.ToLower().Trim()) ? opt.Patients.Where(j =>
j.FirstName.ToLower().Trim() == patf.ToLower().Trim()).FirstOrDefault().Id : InsertPatient(patf, patl, cc.DOB, 122, cc.Insurance);
_claimInfo.InsuranceName = cc.CarrierName;
_claimInfo.SelfClaim = true;
_claimInfo.DOSFrom = Convert.ToDateTime(cc.DOS);
_claimInfo.DOSTo = Convert.ToDateTime(cc.DOE);
_claimInfo.BillingDate = Convert.ToDateTime(cc.DOE);
_claimInfo.ClaimNum = cc.Insurance;
_claimInfo.SubmitAmount = Convert.ToDecimal(cc.BillValue);
}
//opt.Configuration.ProxyCreationEnabled = false;
opt.ClaimsInfoes.Add(_claimInfo);
opt.SaveChanges();
return _claimInfo.Id;
}
}
It is taking 4-5 seconds to save a record. Size of ObservableCollection is more than 1000. It is taking 30mins aprox to save all the Observable Collection. Am I doing something wrong here that is taking more time. Is there anything I can do to improve performance.