private FeedItem[] GetDbData() { const string cacheKey = "FeedController.GetDbData"; var result = this.cache.Get(cacheKey) as FeedItem[]; if (result != null) { return(result); } lock (dbLock) { using (var db = new FeedDataContext()) { result = db.Items.AsQueryable().ToArray(); if (result.Length.Equals(0)) { this.Refresh().Wait(); result = db.Items.AsQueryable().ToArray(); } return(this.cache.Set(cacheKey, result, DateTimeOffset.Now.AddHours(1))); } } }
public async Task <string> Refresh() { var client = new HttpClient(); var result = (await client .GetStringAsync("http://storage1.merchantadvantage.com/macm2543/AllRegionProducts.txt")) .Split(System.Environment.NewLine.ToCharArray()); lock (dbLock) { using (var db = new FeedDataContext()) { var log = new StringBuilder(); try { db.Database.EnsureDeleted(); db.Database.EnsureCreated(); var columns = result[0].Split('\t'); for (int i = 1; i < result.Length; i++) { log.AppendLine("Processing " + result[i]); var line = result[i].Split('\t'); if (line.Length <= 1) { continue; } var item = new FeedItem(); for (int j = 0; j < columns.Length; j++) { var columnName = columns[j]; var columnValue = line[j]; log.AppendLine("Setting value for column " + columnName + " to " + columnValue); var feedItemType = item.GetType(); var feedItemProperty = feedItemType.GetProperty(columnName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); if (feedItemProperty != null) { feedItemProperty.GetSetMethod().Invoke(item, new object[] { columnValue }); } else { log.AppendLine("Property not found: " + columnName); Debug.WriteLine("Property not found: " + columnName); } } db.Items.Add(item); } var rowsAffected = db.SaveChanges(); return("Success! (" + rowsAffected + ")"); } catch (System.Exception ex) { return(log.ToString() + "\n\n\n" + ex.Message); } } } }