public async Task <bool> RefreshStoreFromCensus()
        {
            var result          = new List <Zone>();
            var createdEntities = new List <Zone>();

            IEnumerable <CensusZoneModel> zones = new List <CensusZoneModel>();

            try
            {
                zones = await _censusZone.GetAllZones();
            }
            catch
            {
                _logger.LogError("Census API query failed: get all Zones. Refreshing store from backup...");
                return(false);
            }

            if (zones != null && zones.Any())
            {
                var censusEntities = zones.Select(ConvertToDbModel);

                using (var factory = _dbContextHelper.GetFactory())
                {
                    var dbContext = factory.GetDbContext();

                    var storedEntities = await dbContext.Zones.ToListAsync();

                    foreach (var censusEntity in censusEntities)
                    {
                        var storeEntity = storedEntities.FirstOrDefault(storedEntity => storedEntity.Id == censusEntity.Id);
                        if (storeEntity == null)
                        {
                            createdEntities.Add(censusEntity);
                        }
                        else
                        {
                            storeEntity = censusEntity;
                            dbContext.Zones.Update(storeEntity);
                        }
                    }

                    if (createdEntities.Any())
                    {
                        await dbContext.Zones.AddRangeAsync(createdEntities);
                    }

                    await dbContext.SaveChangesAsync();

                    _logger.LogInformation($"Refreshed Zones store");
                }

                return(true);
            }
            else
            {
                return(false);
            }
        }
Beispiel #2
0
        public async Task RefreshStore()
        {
            var result          = new List <Zone>();
            var createdEntities = new List <Zone>();

            var Zones = await _censusZone.GetAllZones();

            if (Zones != null)
            {
                var censusEntities = Zones.Select(ConvertToDbModel);

                using (var factory = _dbContextHelper.GetFactory())
                {
                    var dbContext = factory.GetDbContext();

                    var storedEntities = await dbContext.Zones.ToListAsync();

                    foreach (var censusEntity in censusEntities)
                    {
                        var storeEntity = storedEntities.FirstOrDefault(storedEntity => storedEntity.Id == censusEntity.Id);
                        if (storeEntity == null)
                        {
                            createdEntities.Add(censusEntity);
                        }
                        else
                        {
                            storeEntity = censusEntity;
                            dbContext.Zones.Update(storeEntity);
                        }
                    }

                    if (createdEntities.Any())
                    {
                        await dbContext.Zones.AddRangeAsync(createdEntities);
                    }

                    await dbContext.SaveChangesAsync();
                }
            }
        }