public Menu Update(Menu menu, List <int> gerechten) { // Attach -> menu item must be known to the context so it can // check whether stuff has changed in it. ctx.Attach(menu); // Load the old set of gerechten for this menu ctx.Entry(menu).Collection(p => p.Bevat).Load(); var gerechtenInMenu = menu.Bevat.Select(i => i.GerechtId); foreach (var gerecht in ctx.Gerechten) { if (gerechten.Contains(gerecht.Id)) { if (!gerechtenInMenu.Contains(gerecht.Id)) { menu.Bevat.Add(new MenuGerecht { GerechtId = gerecht.Id, MenuId = menu.Id }); } } else if (gerechtenInMenu.Contains(gerecht.Id)) { var itemToRemove = menu.Bevat.FirstOrDefault(m => m.GerechtId == gerecht.Id); ctx.Remove(itemToRemove); } } ctx.Menus.Update(menu); ctx.SaveChanges(); return(menu); }