public void AddOrUpdate(Common.Models.Signal signal) { MOE.Common.Models.Signal g = (from r in _db.Signals where r.SignalID == signal.SignalID select r).FirstOrDefault(); if (g == null) { _db.Signals.Add(signal); } else { Update(signal); } }
public void Update(MOE.Common.Models.Signal incomingSignal) { MOE.Common.Models.Signal signalFromDatabase = (from r in _db.Signals where r.SignalID == incomingSignal.SignalID select r).FirstOrDefault(); if (signalFromDatabase != null) { signalFromDatabase.VersionAction = (from r in _db.VersionActions where r.ID == 3 select r).FirstOrDefault(); if (incomingSignal.Approaches != null) { foreach (MOE.Common.Models.Approach a in incomingSignal.Approaches) { var approach = signalFromDatabase.Approaches.FirstOrDefault(app => app.ApproachID == a.ApproachID); if (approach != null) { if (!a.Equals(approach)) { signalFromDatabase.Approaches.Remove(approach); signalFromDatabase.Approaches.Add(a); } } else { signalFromDatabase.Approaches.Add(a); } if (a.Detectors != null) { foreach (MOE.Common.Models.Detector newDetector in a.Detectors) { var detectorFromDatabase = _db.Detectors.Where(d => d.ID == newDetector.ID).FirstOrDefault(); if (newDetector.DetectionTypes == null) { newDetector.DetectionTypes = _db.DetectionTypes.Where(x => newDetector.DetectionTypeIDs.Contains(x.DetectionTypeID)).ToList(); } if (detectorFromDatabase != null) { if (!newDetector.Equals(detectorFromDatabase)) { if (detectorFromDatabase.DetectionTypes == null) { detectorFromDatabase.DetectionTypes = new List <DetectionType>(); } var deletedDetectionTypes = detectorFromDatabase.DetectionTypes .Except(newDetector.DetectionTypes).ToList <DetectionType>(); var addedDetectionTypes = newDetector.DetectionTypes .Except(detectorFromDatabase.DetectionTypes).ToList <DetectionType>(); deletedDetectionTypes.ForEach(delDet => detectorFromDatabase.DetectionTypes.Remove(delDet)); foreach (DetectionType n in addedDetectionTypes) { detectorFromDatabase.DetectionTypes.Add(n); } a.Detectors.Remove(newDetector); a.Detectors.Add(detectorFromDatabase); } } else { if (newDetector.DetectionTypes == null) { newDetector.DetectionTypes = _db.DetectionTypes.Where(x => newDetector.DetectionTypeIDs.Contains(x.DetectionTypeID)).ToList(); } if (approach != null) { approach.Detectors.Add(newDetector); } } } } } } } else { foreach (Common.Models.Approach a in incomingSignal.Approaches) { foreach (Common.Models.Detector gd in a.Detectors) { gd.DetectionTypes = _db.DetectionTypes.Where(x => gd.DetectionTypeIDs.Contains(x.DetectionTypeID)).ToList(); } } _db.Signals.Add(incomingSignal); } }