private void process() { if (InputBox.confirm("The database will be intialized.")!=System.Windows.Forms.DialogResult.OK) { return; }; Monitor.write("Starting Process : Begin Inventory"); _interrupt = false; Dispatcher.BeginInvoke(new ThreadStart(() => Statusbar.displayFirstField("Processing..."))); using (var xl = new ExcelWrapper()) using (var context = new d060Entities()) { var bis = new BeginInventorySource(xl); var tm = new TimeMonitor(2, bis.LastRow); Monitor.write("Lines to process : {0}", bis.LastRow - 1); for (long r = 2;r<=bis.LastRow;r++) { if (_interrupt) { return; }; processRow(r, context, bis,tm); } } } void processRow(long r, d060Entities context,BeginInventorySource bis, TimeMonitor tm) { string d020Parcel; string goods; decimal weight; decimal amount; bis.getRow(r, out d020Parcel, out goods, out weight, out amount); var statusMessage = string.Format("Processing... {0} on row {1} {2}", d020Parcel, r, tm.display(r)); Dispatcher.BeginInvoke(new ThreadStart(() => Statusbar.displayFirstField(statusMessage))); var parcel = new d060Entity.Parcel(); parcel.Cost = amount; parcel.ParcelWeight = weight; parcel.ParcelStatus = d060Entity.Repository.getParcelstatus(d060Entity.Repository.eParcelstatus.Active); parcel.Creationdate = DateTime.Now; parcel.Lastupdatedate = DateTime.Now; parcel.Goods = goods; parcel.D020number = d020Parcel; parcel.D020wrapper = ""; // parcel.CalculationStatus = "Locked"; <== missing assignment var transaction = new d060Entity.Transaction(); transaction.Creationdate = DateTime.Now; transaction.Lastupdatedate = DateTime.Now; transaction.TransactionDate = new DateTime(2014, 1, 1); transaction.TransactionWeight = weight; transaction.Amount = amount; transaction.Transactiontypes_id = d060Entity.Repository.getTransactiontypes_id(d060Entity.Repository.eTransactiontypes.BeginInventory); transaction.Goods = goods; transaction.D010Transaction = ""; transaction.D010Transactiontype = " "; transaction.D020Transaction = ""; transaction.D020Transactiontype = " "; var origin = new d060Entity.Origin(); origin.Parcels_id = parcel.Parcels_Id; origin.OriginCalculationstatus = "Locked"; { using (var t = context.Database.BeginTransaction()) { try { string message; bool success; context.Parcels.Add(parcel); Repository.savechanges(context, out success, out message); if (success == false) { Monitor.write("**** Currently processing : {0} **** ", parcel.D020number); Monitor.write(message); t.Rollback(); return; }; transaction.Parcels_Id = parcel.Parcels_Id; context.Transactions.Add(transaction); Repository.savechanges(context, out success, out message); if (success == false) { Monitor.write("**** Currently processing : {0} **** ", parcel.D020number); Monitor.write(message); t.Rollback(); return; }; parcel.CreationTransaction_Id = transaction.Transactions_Id; origin.Parcels_id = parcel.Parcels_Id; context.Origins.Add(origin); Repository.savechanges(context, out success, out message); if (success == false) { Monitor.write("**** Currently processing : {0} **** ", parcel.D020number); Monitor.write(message); t.Rollback(); return; }; t.Commit(); } catch (Exception ex) { Monitor.write("Problem with Parcel {0}, line {1} : ", parcel.D020number, r, ex.Message); t.Rollback(); } } } }>Hmm, never noticed this problem before. Are you calling this method for a number of rows all having the same problem or it's just a single row save and every time it increments?
>>>> public static void savechanges(d060Entities context,out bool success,out string message) >>>> { >>>> var s = new StringBuilder(); >>>> s.Clear(); >>>> success = true; >>>> message = ""; >>>> try >>>> { >>>> context.SaveChanges(); >>>> } >>>> catch (DbEntityValidationException ex) >>>> { >>>> s.AppendLine("DbEntityValidationException."); >>>> s.AppendFormat("Errors : {0}", ex.EntityValidationErrors.Count()); >>>> s.AppendLine(); >>>> foreach (var e in ex.EntityValidationErrors) >>>> { >>>> foreach (var e1 in e.ValidationErrors) >>>> { >>>> s.AppendFormat(e1.ErrorMessage); >>>> s.AppendLine(); >>>> } >>>> } >>>> success = false; >>>> } >>>> catch (Exception ex) >>>> { >>>> s.AppendFormat("error : {0}", ex.ToString()); >>>> success = false; >>>> } >>>> message = s.ToString(); >>>> } >>>>>>>