public System.Data.SqlClient.SqlTransaction SaveTruckRegistration() { IGINProcess originalGIN = new GINProcessBLL(currentGINProcess.GINProcessInformation.TransactionId); SqlTransaction transaction = currentGINProcess.SaveTruckRegistration(); //ConfirmNoConcurrency(Trucks, Loads, Weight) //newly added trucks var newTrucks = (from cTruck in currentGINProcess.GINProcessInformation.Trucks where !(from oTruck in originalGIN.GINProcessInformation.Trucks select oTruck.TruckId).Contains(cTruck.TruckId) select new object[] { null, cTruck, AuditTrailWrapper.NewRecord }); //existing trucks var existingTrucks = (from cTruck in currentGINProcess.GINProcessInformation.Trucks join oTruck in originalGIN.GINProcessInformation.Trucks on cTruck.TruckId equals oTruck.TruckId select new object[] { oTruck, cTruck, AuditTrailWrapper.ExistingRecord }); //deleted trucks var deletedTrucks = (from oTruck in originalGIN.GINProcessInformation.Trucks where !(from cTruck in currentGINProcess.GINProcessInformation.Trucks select cTruck.TruckId).Contains(oTruck.TruckId) select oTruck); try { AuditTrailWrapper atw = new AuditTrailWrapper(AuditTrailWrapper.TruckRegistration, newTrucks.ToArray(), "PUN Process"); atw.AddChange(existingTrucks.ToArray()); if (!atw.Save()) { transaction.Rollback(); throw new Exception("Failed to save audit trail!"); } } catch (Exception ex) { transaction.Rollback(); throw ex; } return(transaction); }