コード例 #1
0
        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)));
                }
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }