Пример #1
0
        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();
            }
        }
Пример #2
0
        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();
            }
        }