public async Task <bool> ImportWeatherData(string url, string apiKey, int cityId) { var result = false; int?externalId; using (var context = new EuropeWeatherEntities()) { externalId = await context.Cities.Where(c => c.ExternalId.HasValue && c.CityId == cityId) .Select(c => c.ExternalId) .FirstOrDefaultAsync(); } if (!externalId.HasValue) { return(false); } var api = new CurrentWeather(); var apiData = api.GetCurrentWeather(url, externalId.Value, apiKey); if (apiData == null) { return(true); //no data received and no error } using (var context = new EuropeWeatherEntities()) { using (var transaction = context.Database.BeginTransaction()) { try { var mapper = new ApiDataToWeatherDataMapper(context); var weatherData = mapper.To(apiData); context.WeatherDataConditions.AddRange(weatherData); context.SaveChanges(); transaction.Commit(); result = true; } catch (Exception) { //TODO: Log error transaction.Rollback(); } } } return(result); }
public async Task <bool> ImportWeatherData(string url, string apiKey) { int[] ids; var result = false; using (var context = new EuropeWeatherEntities()) { ids = await context.Cities.Where(c => c.ExternalId.HasValue).Select(c => c.ExternalId.Value).ToArrayAsync(); } var api = new CurrentWeather(); var apiData = api.GetCurrentWeather(url, ids, apiKey); if (apiData == null || apiData.Count == 0) { return(true); //no results but no error } using (var context = new EuropeWeatherEntities()) { using (var transaction = context.Database.BeginTransaction()) { try { var mapper = new ApiDataToWeatherDataMapper(context); foreach (var conditions in apiData.List.Select(weatherData => mapper.To(weatherData))) { context.WeatherDataConditions.AddRange(conditions); } context.SaveChanges(); transaction.Commit(); result = true; } catch (Exception) { //TODO: Log error transaction.Rollback(); } } } return(result); }