private void Merge(DataModel.Introduction dbItem, IEnumerable <ExternalUrl> newExternalUrls) { if (newExternalUrls == null) { newExternalUrls = new List <ExternalUrl>(); } var toRemove = dbItem.ExternalUrls.Where(eu => !newExternalUrls.Any(x => eu.ExternalUrlId == x.Id)).ToList(); foreach (var item in toRemove) { dbItem.ExternalUrls.Remove(item); _context.ExternalUrls.Remove(item.ExternalUrl); _context.IntroductionExternalUrls.Remove(item); } var toAdd = newExternalUrls.Where(x => x.Id == null); foreach (var item in toAdd) { dbItem.ExternalUrls.Add(AbstractionsConverter.ToIntroductionExternalUrl(item)); } var toUpdate = newExternalUrls.Where(x => x.Id.HasValue); foreach (var item in toUpdate) { var upd = dbItem.ExternalUrls.FirstOrDefault(x => x.ExternalUrlId == item.Id.Value); upd.ExternalUrl.DisplayName = item.DisplayName; upd.ExternalUrl.Url = item.Url; upd.ExternalUrl.Version++; } }