public async Task SyncApa() { var feed = await FeedReader.ReadAsync("https://www.ots.at/rss/politik"); var newItems = feed.Items.Select(n => new Artikel() { Author = n.Author, Description = n.Description, Link = n.Link, Title = n.Title, PubDate = n.PublishingDate, Identifier = n.Id }) .ToList(); var identifiers = newItems.Select(n => n.Identifier); using (var context = new ContextFactory().CreateDbContext()) { var availableIds = context.Artikel.Select(n => n.Identifier).Intersect(identifiers).ToList(); newItems = newItems.Where(n => !availableIds.Contains(n.Identifier)).ToList(); context.AddRange(newItems); context.SaveChanges(); } }
public async Task SyncPolitiker() { var parLoad = await LoadParteien(); var polLoad = await LoadNationalratPolitiker(); using (var context = new ContextFactory().CreateDbContext()) { context.Database.BeginTransaction(); var parDb = context.Partei.ToList(); parDb.ToList().ForEach(n => { var newObject = parLoad.SingleOrDefault(m => m.ExternalId == n.ExternalId); if (newObject != null) { n.Name = newObject.Name; n.Kurzzeichen = newObject.Kurzzeichen; n.ExternalId = newObject.ExternalId; } }); var parNew = parLoad .Where(n => !parDb.Select(m => m.ExternalId).Contains(n.ExternalId)) .Select(n => new en.Party.Partei() { Kurzzeichen = n.Kurzzeichen, ExternalId = n.ExternalId, Name = n.Name, Id = parDb.SingleOrDefault(m => m.ExternalId == n.ExternalId)?.Id ?? 0 }) .ToList(); context.AddRange(parNew.Where(n => n.Id == 0).ToList()); context.SaveChanges(); var polDb = context.Politiker.ToList(); polDb.ToList().ForEach(n => { var newObject = polLoad.SingleOrDefault(m => m.ExternalId == n.ExternalId); if (newObject != null) { n.Nachname = newObject.Nachname; n.Vorname = newObject.Vorname; n.Wahlkreis = newObject.Wahlkreis; n.Bundesland = newObject.Bundesland; n.AkadGradPost = newObject.AkadGradPost; n.AkadGradPre = newObject.AkadGradPre; n.ExternalId = newObject.ExternalId; n.ParteiId = parNew.Concat(parDb) .SingleOrDefault(m => m.Kurzzeichen == newObject.ParteiKurzzeichen)?.Id; n.IsNationalrat = true; } else { n.IsNationalrat = false; } }); var polNew = polLoad.Where(n => !polDb.Select(m => m.ExternalId).Contains(n.ExternalId)); var polNewMapped = polNew.Select(n => new en.Party.Politiker { Nachname = n.Nachname, Vorname = n.Vorname, Wahlkreis = n.Wahlkreis, Bundesland = n.Bundesland, AkadGradPost = n.AkadGradPost, AkadGradPre = n.AkadGradPre, ExternalId = n.ExternalId, ParteiId = parNew.Concat(parDb).SingleOrDefault(m => m.Kurzzeichen == n.ParteiKurzzeichen)?.Id, IsNationalrat = true }); context.AddRange(polNewMapped.Where(n => n.Id == 0).ToList()); context.SaveChanges(); context.Database.CommitTransaction(); } }