public void Update(string id, Event anObject) { using (var context = new EventContext()) { var newList = new List <MarketingMaterial>(); var ninja = context.Events.Include(n => n.Materials) .FirstOrDefault(n => n.id == id); if (anObject.Materials.Count < ninja.Materials.Count) { // deleted marketing material var differenceQuery = ninja.Materials.Except(anObject.Materials); context.Material.Remove(differenceQuery.FirstOrDefault()); context.SaveChanges(); } else { // added marketing material var differenceQuery = ninja.Materials.Except(anObject.Materials); var marketingMaterials = differenceQuery as MarketingMaterial[] ?? differenceQuery.ToArray(); if (marketingMaterials.Count() != 0) { context.Material.Remove(marketingMaterials.FirstOrDefault()); } var differenceQuery1 = anObject.Materials.Except(ninja.Materials); foreach (var material in differenceQuery1) { ninja.Materials.Add(MarketingMaterial.Copy(material)); } // ninja.Materials = newList; ninja.EventLocation = anObject.EventLocation; ninja.EventType = anObject.EventType; ninja.EventDate = anObject.EventDate; ninja.EventName = anObject.EventName; ninja.EventAttendance = anObject.EventAttendance; context.Entry(ninja).State = EntityState.Modified; context.SaveChanges(); } } }