Beispiel #1
0
        /// <summary>
        /// Default constructor of Allocator
        /// </summary>
        public Allocator()
        {
            this.TopBlock = new BufferBlock <IRecord>();

            this.LinkOptions = new DataflowLinkOptions {
                PropagateCompletion = true
            };

            #region NewInsertBlocks
            this.InsertBestSellersAction = new ActionBlock <best_sellers[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.best_sellers.AddRange(a);
                    context.SaveChangesAsync();
                }
            });

            this.InsertCategoryAction = new ActionBlock <category[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.categories.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertCategoryLookupAction = new ActionBlock <category_lookup[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.category_lookup.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertCategoryTreeAction = new ActionBlock <category_tree[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.category_tree.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertEanAction = new ActionBlock <ean[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.eans.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertFbaFeesAction = new ActionBlock <fba_fees[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.fba_fees.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertFeatureAction = new ActionBlock <feature[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.features.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertFreqBoughtAction = new ActionBlock <freq_bought_together[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.freq_bought_together.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertLanguageAction = new ActionBlock <language[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    Console.WriteLine("HIT - Language");

                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.languages.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertMostRatedSellersAction = new ActionBlock <most_rated_sellers[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    Console.WriteLine("HIT - MostRatedSellers");

                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.most_rated_sellers.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertPriceHistoryAction = new ActionBlock <price_history[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    Console.WriteLine("HIT - PriceHistory");

                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.price_history.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertProductAction = new ActionBlock <product[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    Console.WriteLine("HIT - Product");

                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.products.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertSellerAction = new ActionBlock <seller[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    Console.WriteLine("HIT - Seller");
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.sellers.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertSellersListedItemsAction = new ActionBlock <sellers_listed_items[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    Console.WriteLine("HIT - SellersListedItems");
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.sellers_listed_items.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertStatisticAction = new ActionBlock <statistic[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    Console.WriteLine("HIT - Statistic");
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.statistics.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertUpcAction = new ActionBlock <upc[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    Console.WriteLine("HIT - Upc");
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.upcs.AddRange(a);
                    context.SaveChanges();
                }
            });

            this.InsertVariationAction = new ActionBlock <variation[]>(a =>
            {
                using (var context = new KeepaContext())
                {
                    Console.WriteLine("HIT - Variation");
                    //context.Configuration.AutoDetectChangesEnabled = false;
                    context.variations.AddRange(a);
                    context.SaveChanges();
                }
            });
            #endregion

            #region NewBatchBlocks
            this.bestSellerBlock      = new BatchBlock <best_sellers>(BATCH_SIZE);
            this.categoryBlock        = new BatchBlock <category>(BATCH_SIZE);
            this.categoryLookupBlock  = new BatchBlock <category_lookup>(BATCH_SIZE);
            this.categoryTreeBlock    = new BatchBlock <category_tree>(BATCH_SIZE);
            this.eanBlock             = new BatchBlock <ean>(BATCH_SIZE);
            this.fbaFeesBlock         = new BatchBlock <fba_fees>(BATCH_SIZE);
            this.featuresBlock        = new BatchBlock <feature>(BATCH_SIZE);
            this.freqBoughtBlock      = new BatchBlock <freq_bought_together>(BATCH_SIZE);
            this.languagesBlock       = new BatchBlock <language>(BATCH_SIZE);
            this.mostRatedSellerBlock = new BatchBlock <most_rated_sellers>(BATCH_SIZE);
            this.priceHistoryBlock    = new BatchBlock <price_history>(BATCH_SIZE);
            this.productBlock         = new BatchBlock <product>(BATCH_SIZE);
            //this.promotionBlock = new BatchBlock<PromotionRecord>(BATCH_SIZE);
            this.sellerItemBlock = new BatchBlock <sellers_listed_items>(BATCH_SIZE);
            this.sellerBlock     = new BatchBlock <seller>(BATCH_SIZE);
            this.statisticsBlock = new BatchBlock <statistic>(BATCH_SIZE);
            //this.topSellerBlock = new BatchBlock<TopSellersRecord>(BATCH_SIZE);
            this.upcBlock       = new BatchBlock <upc>(BATCH_SIZE);
            this.variationBlock = new BatchBlock <variation>(BATCH_SIZE);
            #endregion

            #region NewTransformBlocks
            this.BestSellerTBlock = new TransformBlock <IRecord, best_sellers>(x => {
                var dobj = (BestSellerRecord)x;
                var val  = new best_sellers(dobj.DomainId, dobj.LastUpdate, dobj.CategoryId, dobj.Asin, dobj.TimeStamp);
                return(val);
            });
            this.CategoryLookupTBlock = new TransformBlock <IRecord, category_lookup>(x =>
            {
                var dobj = (CategoryLookupRecord)x;
                var val  = new category_lookup(dobj.domainId, dobj.catId, dobj.name, dobj.children, dobj.parent, dobj.highestRank, dobj.productCount, dobj.TimeStamp);
                return(val);
            });
            this.CategoryTBlock = new TransformBlock <IRecord, category>(x => {
                var dobj = (CategoryRecord)x;
                var val  = new category(dobj.ProductId, dobj.AmznCategoryId, dobj.TimeStamp);
                return(val);
            });
            //this.CategoryTreeTBlock
            //this.DealTBlock
            this.EanTBlock = new TransformBlock <IRecord, ean>(x => {
                var dobj = (EanRecord)x;
                var val  = new ean(dobj.ProductId, dobj.EanNumber, dobj.TimeStamp);
                return(val);
            });
            this.FbaFeesTBlock = new TransformBlock <IRecord, fba_fees>(x => {
                var dobj = (FbaFeesRecord)x;
                var val  = new fba_fees(dobj.ProductId, dobj.PickPackFee, dobj.PickPackFeeTax, dobj.StorageFee, dobj.StorageFeeTax, dobj.TimeStamp);
                return(val);
            });
            this.FeatureTBlock = new TransformBlock <IRecord, feature>(x => {
                var dobj = (FeaturesRecord)x;
                var val  = new feature(dobj.ProductId, dobj.Features, dobj.TimeStamp);
                return(val);
            });
            this.FreqBoughtTBlock = new TransformBlock <IRecord, freq_bought_together>(x => {
                var dobj = (FreqBoughtTogetherRecord)x;
                var val  = new freq_bought_together(dobj.ProductId, dobj.AssociatedAsin, dobj.TimeStamp);
                return(val);
            });
            this.LanguageTBlock = new TransformBlock <IRecord, language>(x => {
                var dobj = (LanguagesRecord)x;
                var val  = new language(dobj.ProductId, dobj.LanguageName, dobj.LanguageType, dobj.AudioFormat, dobj.TimeStamp);
                return(val);
            });
            this.MostRatedSellersTBlock = new TransformBlock <IRecord, most_rated_sellers>(x => {
                var dobj = (MostRatedSellersRecord)x;
                var val  = new most_rated_sellers(dobj.AmznSellerIdentifier, dobj.TimeStamp);
                return(val);
            });
            this.PriceHistoryTBlock = new TransformBlock <IRecord, price_history>(x => {
                var dobj = (PriceHistoryRecord)x;
                var val  = new price_history(dobj.ProductId, dobj.obHistoryType, dobj.obDate, dobj.obPrice, dobj.obShipping, dobj.TimeStamp);
                return(val);
            });
            this.ProductTBlock = new TransformBlock <IRecord, product>(x =>
            {
                var dobj = (ProductRecord)x;
                var val  = new product(dobj.ProductId, dobj.productType.ToString(), dobj.asin, dobj.domainId, dobj.title, dobj.trackingSince, dobj.listedSince, dobj.lastUpdate,
                                       dobj.lastRatingUpdate, dobj.lastPriceChange, dobj.lastEbayUpdate, dobj.imagesCSV, dobj.rootCategory, dobj.parentAsin, dobj.variationCSV, dobj.mpn, dobj.hasReviews,
                                       dobj.type, dobj.manufacturer, dobj.brand, dobj.label, dobj.department, dobj.publisher, dobj.productGroup, dobj.partNumber, dobj.author, dobj.binding,
                                       dobj.numberOfItems, dobj.numberOfPages, dobj.publicationDate, dobj.releaseDate, dobj.studio, dobj.genre, dobj.model, dobj.color, dobj.size, dobj.edition,
                                       dobj.platform, dobj.format, dobj.description, dobj.hazardousMaterialType, dobj.packageHeight, dobj.packageLength, dobj.packageWidth, dobj.packageWeight, dobj.packageQuantity, dobj.availabilityAmazon,
                                       dobj.isAdultProduct, dobj.newPriceIsMAP, dobj.isEligibleForTradeIn, dobj.isEligibleForSuperSaverShipping, dobj.isRedirectASIN, dobj.isSNS, dobj.offersSuccessful, dobj.TimeStamp);
                return(val);
            });
            this.SellerTBlock = new TransformBlock <IRecord, seller>(x => {
                var dobj = (SellerRecord)x;
                var val  = new seller(dobj.SellerUid, dobj.DomainId, dobj.TrackingSince, dobj.LastUpdate, dobj.SellerId, dobj.SellerName, dobj.IsScammer, dobj.HasFba,
                                      dobj.TotalStoreFrontAsinRecTime, dobj.TotalStoreFrontAsins, dobj.Rating, dobj.RatingTime, dobj.RatingCount, dobj.RatingCountTime, dobj.TimeStamp);
                return(val);
            });
            this.SellerListedItemsTBlock = new TransformBlock <IRecord, sellers_listed_items>(x => {
                var dobj = (SellerItemRecord)x;
                var val  = new sellers_listed_items(dobj.AssociatedSeller, dobj.Asin, dobj.AsinLastSeen, dobj.TimeStamp);
                return(val);
            });
            this.StatisticsTBlock = new TransformBlock <IRecord, statistic>(x => {
                var dobj = (StatisticsRecord)x;
                var val  = new statistic(dobj.ProductId, dobj.StatType, dobj.Current, dobj.Avg, dobj.Avg30, dobj.Avg90, dobj.Avg180, dobj.AtIntervalStart, dobj.MinPriceType, dobj.MinPriceRecTime,
                                         dobj.MinPriceValue, dobj.MaxPriceType, dobj.MaxPriceRecTime, dobj.MaxPriceValue, dobj.IntervalMinPriceType, dobj.IntervalMinPriceRecTime, dobj.IntervalMinPriceValue,
                                         dobj.IntervalMaxPriceType, dobj.IntervalMaxPriceRecTime, dobj.IntervalMaxPriceValue, dobj.OutOfStockPercentageInInterval, dobj.OutOfStockPercentage30, dobj.OutOfStockPercentage90,
                                         dobj.LastOffersUpdate, dobj.TotalOffersCount, dobj.LightningDealInfo, dobj.RetrievedOfferCount, dobj.BuyBoxPrice, dobj.BuyBoxShipping, dobj.BuyBoxIsUnqualified,
                                         dobj.BuyBoxIsShippable, dobj.BuyBoxIsPreorder, dobj.BuyBoxIsFba, dobj.BuyBoxIsAmazon, dobj.BuyBoxIsMap, dobj.BuyBoxIsUsed, dobj.SellerIdsLowestFba, dobj.SellerIdsLowestFbm,
                                         dobj.OfferCountFba, dobj.OfferCountFbm, dobj.TimeStamp);
                return(val);
            });
            this.UpcTBlock = new TransformBlock <IRecord, upc>(x => {
                var dobj = (UpcRecord)x;
                var val  = new upc(dobj.ProductId, dobj.UpcNumber, dobj.TimeStamp);
                return(val);
            });
            this.VariationTBlock = new TransformBlock <IRecord, variation>(x => {
                var dobj = (VariationRecord)x;
                var val  = new variation(dobj.productId, dobj.Variation, dobj.vDimension, dobj.vValue, dobj.TimeStamp);
                return(val);
            });
            #endregion

            #region NewFilters
            this.CategoryLookupFilter     = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.CategoryLookupRecord); };
            this.BestSellerFilter         = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.BestSellerRecord); };
            this.CategoryFilter           = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.CategoryRecord); };
            this.CategoryTreeFilter       = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.CategoryTreeRecord); };
            this.DealFilter               = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.DealRecord); };
            this.EanFilter                = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.EanRecord); };
            this.FbaFeesFilter            = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.FbaFeesRecord); };
            this.FeatureFilter            = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.FeaturesRecord); };
            this.FreqBoughtTogetherFilter = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.FrequentlyBoughtTogetherRecord); };
            this.LanguageFilter           = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.LanguagesRecord); };
            this.MRSFilter                = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.TopSellerRecord); };
            this.PriceHistoryFilter       = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.PriceHistoryRecord); };
            this.ProductFilter            = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.ProductRecord); };
            this.SellerFilter             = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.SellerRecord); };
            this.SLIFilter                = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.SellerItemRecord); };
            this.StatisticsFilter         = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.StatisitcsRecord); };
            this.UpcFilter                = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.UpcRecord); };
            this.VariationFilter          = (IRecord r) => { return(r.KeepaRecordType == KeepaRecordType.VariationsRecord); };
            #endregion

            //Dataflow Links
            #region Links
            //set up links using propogate oncompletion and appropriate filters
            #region TopToTransform
            this.TopBlock.LinkTo(this.BestSellerTBlock, this.LinkOptions, this.BestSellerFilter);
            this.TopBlock.LinkTo(this.CategoryTBlock, this.LinkOptions, this.CategoryFilter);
            this.TopBlock.LinkTo(this.CategoryLookupTBlock, this.LinkOptions, this.CategoryLookupFilter);
            this.TopBlock.LinkTo(this.EanTBlock, this.LinkOptions, this.EanFilter);
            this.TopBlock.LinkTo(this.FbaFeesTBlock, this.LinkOptions, this.FbaFeesFilter);
            this.TopBlock.LinkTo(this.FeatureTBlock, this.LinkOptions, this.FeatureFilter);
            this.TopBlock.LinkTo(this.FreqBoughtTBlock, this.LinkOptions, this.FreqBoughtTogetherFilter);
            this.TopBlock.LinkTo(this.LanguageTBlock, this.LinkOptions, this.LanguageFilter);
            this.TopBlock.LinkTo(this.MostRatedSellersTBlock, this.LinkOptions, this.MRSFilter);
            this.TopBlock.LinkTo(this.PriceHistoryTBlock, this.LinkOptions, this.PriceHistoryFilter);
            this.TopBlock.LinkTo(this.ProductTBlock, this.LinkOptions, this.ProductFilter);
            this.TopBlock.LinkTo(this.SellerTBlock, this.LinkOptions, this.SellerFilter);
            this.TopBlock.LinkTo(this.SellerListedItemsTBlock, this.LinkOptions, this.SLIFilter);
            this.TopBlock.LinkTo(this.StatisticsTBlock, this.LinkOptions, this.StatisticsFilter);
            this.TopBlock.LinkTo(this.UpcTBlock, this.LinkOptions, this.UpcFilter);
            this.TopBlock.LinkTo(this.VariationTBlock, this.LinkOptions, this.VariationFilter);
            #endregion
            //attach transforms to batch
            #region TransformToBatch
            this.BestSellerTBlock.LinkTo(this.bestSellerBlock, this.LinkOptions);
            this.CategoryTBlock.LinkTo(this.categoryBlock, this.LinkOptions);
            this.CategoryLookupTBlock.LinkTo(this.categoryLookupBlock, this.LinkOptions);
            this.EanTBlock.LinkTo(this.eanBlock, this.LinkOptions);
            this.FbaFeesTBlock.LinkTo(this.fbaFeesBlock, this.LinkOptions);
            this.FeatureTBlock.LinkTo(this.featuresBlock, this.LinkOptions);
            this.FreqBoughtTBlock.LinkTo(this.freqBoughtBlock, this.LinkOptions);
            this.LanguageTBlock.LinkTo(this.languagesBlock, this.LinkOptions);
            this.MostRatedSellersTBlock.LinkTo(this.mostRatedSellerBlock, this.LinkOptions);
            this.PriceHistoryTBlock.LinkTo(this.priceHistoryBlock, this.LinkOptions);
            this.ProductTBlock.LinkTo(this.productBlock, this.LinkOptions);
            this.SellerTBlock.LinkTo(this.sellerBlock, this.LinkOptions);
            this.SellerListedItemsTBlock.LinkTo(this.sellerItemBlock, this.LinkOptions);
            this.StatisticsTBlock.LinkTo(this.statisticsBlock, this.LinkOptions);
            this.UpcTBlock.LinkTo(this.upcBlock, this.LinkOptions);
            this.VariationTBlock.LinkTo(this.variationBlock, this.LinkOptions);
            #endregion
            //insert delegate for batches
            #region BatchToInsert
            this.bestSellerBlock.LinkTo(InsertBestSellersAction, this.LinkOptions);
            this.bestSellerBlock.Completion.ContinueWith(delegate
            {
                InsertBestSellersAction.Complete();
                InsertBestSellersAction.Completion.Wait();
            });

            this.categoryBlock.LinkTo(InsertCategoryAction, this.LinkOptions);
            this.categoryBlock.Completion.ContinueWith(delegate
            {
                InsertCategoryAction.Complete();
                InsertCategoryAction.Completion.Wait();
            });

            this.categoryLookupBlock.LinkTo(InsertCategoryLookupAction, this.LinkOptions);
            this.categoryLookupBlock.Completion.ContinueWith(delegate
            {
                InsertCategoryLookupAction.Complete();
                InsertCategoryLookupAction.Completion.Wait();
            });

            this.categoryTreeBlock.LinkTo(InsertCategoryTreeAction, this.LinkOptions);
            this.categoryTreeBlock.Completion.ContinueWith(delegate
            {
                InsertCategoryTreeAction.Complete();
                InsertCategoryTreeAction.Completion.Wait();
            });

            this.eanBlock.LinkTo(InsertEanAction, this.LinkOptions);
            this.eanBlock.Completion.ContinueWith(delegate
            {
                InsertEanAction.Complete();
                InsertEanAction.Completion.Wait();
            });

            this.fbaFeesBlock.LinkTo(InsertFbaFeesAction, this.LinkOptions);
            this.fbaFeesBlock.Completion.ContinueWith(delegate
            {
                InsertFbaFeesAction.Complete();
                InsertFbaFeesAction.Completion.Wait();
            });

            this.featuresBlock.LinkTo(InsertFeatureAction, this.LinkOptions);
            this.featuresBlock.Completion.ContinueWith(delegate
            {
                InsertFeatureAction.Complete();
                InsertFeatureAction.Completion.Wait();
            });

            this.freqBoughtBlock.LinkTo(InsertFreqBoughtAction, this.LinkOptions);
            this.freqBoughtBlock.Completion.ContinueWith(delegate
            {
                InsertFreqBoughtAction.Complete();
                InsertFreqBoughtAction.Completion.Wait();
            });

            this.languagesBlock.LinkTo(InsertLanguageAction, this.LinkOptions);
            this.languagesBlock.Completion.ContinueWith(delegate
            {
                InsertLanguageAction.Complete();
                InsertLanguageAction.Completion.Wait();
            });

            this.mostRatedSellerBlock.LinkTo(InsertMostRatedSellersAction, this.LinkOptions);
            this.mostRatedSellerBlock.Completion.ContinueWith(delegate
            {
                InsertMostRatedSellersAction.Complete();
                InsertMostRatedSellersAction.Completion.Wait();
            });

            this.priceHistoryBlock.LinkTo(InsertPriceHistoryAction, this.LinkOptions);
            this.priceHistoryBlock.Completion.ContinueWith(delegate
            {
                InsertPriceHistoryAction.Complete();
                InsertPriceHistoryAction.Completion.Wait();
            });

            this.productBlock.LinkTo(InsertProductAction, this.LinkOptions);
            this.productBlock.Completion.ContinueWith(delegate
            {
                InsertProductAction.Complete();
                InsertProductAction.Completion.Wait();
            });

            this.sellerItemBlock.LinkTo(InsertSellersListedItemsAction, this.LinkOptions);
            this.sellerItemBlock.Completion.ContinueWith(delegate
            {
                InsertSellersListedItemsAction.Complete();
                InsertSellersListedItemsAction.Completion.Wait();
            });

            this.sellerBlock.LinkTo(InsertSellerAction, this.LinkOptions);
            this.sellerBlock.Completion.ContinueWith(delegate
            {
                InsertSellerAction.Complete();
                InsertSellerAction.Completion.Wait();
            });

            this.statisticsBlock.LinkTo(InsertStatisticAction, this.LinkOptions);
            this.statisticsBlock.Completion.ContinueWith(delegate
            {
                InsertStatisticAction.Complete();
                InsertStatisticAction.Completion.Wait();
            });

            this.upcBlock.LinkTo(InsertUpcAction, this.LinkOptions);
            this.upcBlock.Completion.ContinueWith(delegate
            {
                InsertUpcAction.Complete();
                InsertUpcAction.Completion.Wait();
            });

            this.variationBlock.LinkTo(InsertVariationAction, this.LinkOptions);
            this.variationBlock.Completion.ContinueWith(delegate
            {
                InsertVariationAction.Complete();
                InsertVariationAction.Completion.Wait();
            });

            #endregion
            #endregion
        }
Beispiel #2
0
        public void SaveNewArticle(Product Record, int countryId)
        {
            country cou = _context.country.Where(c => c.id == countryId).FirstOrDefault();
            webshop webshop = _context.webshop.Where(w => w.url == Record.Webshop).FirstOrDefault();

            if (webshop == default(webshop))
            {
                return;
            }

            if (cou == default(country))
            {
                Console.WriteLine("Could not find country id {0}, aborting the save.", countryId);
                return;
            }
            article art = new article
            {
                description = Record.Description,
                brand = Record.Brand,
                image_loc = Record.Image_Loc

            };
            // Do not modify this as this is neccessary to get the last id.
            _context.article.Add(art);

            ean ean = new ean
            {
                ean1 = Record.EAN,
                article_id = art.id
            };
            _context.ean.Add(ean);

            title title = new title
            {
                title1 = Record.Title,
                country_id = (short)countryId,
                article_id = art.id,
                country = cou
            };
            _context.title.Add(title);

            title_synonym ts = new title_synonym
            {
                title = Record.Title,
                title_id = title.id,
                occurrences = 1
            };
            _context.title_synonym.Add(ts);

            if (Record.SKU != "")
            {
                sku sku = new sku
                {
                    sku1 = Record.SKU,
                    article_id = art.id
                };
                _context.sku.Add(sku);
            }

            decimal castedShipCost;
            decimal castedPrice;
            if (!(decimal.TryParse(Record.DeliveryCost, NumberStyles.Any, CultureInfo.InvariantCulture, out castedShipCost))) Console.WriteLine("Cannot cast shipping cost " + Record.DeliveryCost + " to decimal.");
            if (!(decimal.TryParse(Record.Price, NumberStyles.Any, CultureInfo.InvariantCulture, out castedPrice))) Console.WriteLine("Cannot cast price " + Record.Price + " to decimal.");

            product product = new product
            {
                article_id = art.id,
                ship_cost = castedShipCost,
                ship_time = Record.DeliveryTime,
                price = castedPrice,
                webshop_url = webshop.url,
                direct_link = Record.Url,
                affiliate_name = Record.Affiliate,
                affiliate_unique_id = Record.AffiliateProdID
            };
            _context.product.Add(product);
            _context.SaveChanges();
        }