public async Task AddOrUpdateMachineParameterAsync(ParametersMachineModelXml m) { var machineModel = _context.Set <MachineModel>().FirstOrDefault(mac => mac.ModelCodev997 == m.ModelCodeV997); if (machineModel != null) { var list = m.Parameters.Parameter.BuildAdapter().AddParameters("idMachineModel", machineModel.Id).AddParameters("modelCode", m.ModelCodeV997).AdaptToType <List <ParameterMachine> >(); foreach (var i in list) { var old = _context.Set <ParameterMachine>().FirstOrDefault(pm => pm.ModelCode == i.ModelCode && pm.VarNumber == i.VarNumber); i.Id = old?.Id ?? 0; i.MachineModelId = machineModel.Id; _context.Set <ParameterMachine>().AddOrUpdate(i); } //elimino i record che non esistono più var curparams = _context.Set <ParameterMachine>().Where(p => p.ModelCode == m.ModelCodeV997.ToString()).ToList(); var toDelete = curparams.Where(c => !list.Any(a => a.VarNumber == c.VarNumber.ToString())).ToList(); if (toDelete.Count > 0) { var ids = toDelete.Select(a => a.Id).ToList(); var values = _context.Set <ParameterMachineValue>().Where(v => ids.Contains(v.ParameterMachineId)).ToList(); if (values.Count > 0) { _context.Set <ParameterMachineValue>().RemoveRange(values); } var resets = _context.Set <ParameterResetValue>().Where(v => ids.Contains(v.ParameterMachineId)).ToList(); if (resets.Count > 0) { _context.Set <ParameterResetValue>().RemoveRange(resets); } var thresholds = _context.Set <ParameterMachineThreshold>().Where(v => ids.Contains(v.ParameterMachineId)).ToList(); if (thresholds.Count > 0) { _context.Set <ParameterMachineThreshold>().RemoveRange(thresholds); } _context.Set <ParameterMachine>().RemoveRange(toDelete); } } await _context.SaveChangesAsync(); }