/// <summary> /// Starts the customer review data pipeline. /// </summary> public static void StartCustomerReviewDataPipeline() { Logger.Info(@"Customer review data pipeline starting..."); var databaseConnectionStringName = @"DatabaseConnectionString"; using (var dbContext = new CustomerReviewDbContext(databaseConnectionStringName)) { if (dbContext.ProductReviewSentenceSentiments.Any() || dbContext.ProductReviewSentenceTags.Any()) { Logger.Warn(@"Please clean the sentiment and tag weight tables and restart."); return; } } var dataProvider = new CustomerReviewDataProvider(databaseConnectionStringName); var activityHub = new DefaultActivityHub(new IActivity[] { new SplitCommentActivity(), new AnalyzeSentimentActivity(), new SaveSentenceSentimentActivity(databaseConnectionStringName), new ExtractTagWeightActivity(), new SaveSentenceTagWeightActivity(databaseConnectionStringName) }); activityHub.ActivityExecuting += (sender, eventArgs) => { var activity = sender as IActivity; if (activity == null) { return; } Logger.Info( $"{activity.Metadata.ActivityType}({activity.Metadata.InstanceId}) processing model: {eventArgs.Context.InputModel.CorrelationId}"); }; activityHub.ActivityExecuted += (sender, eventArgs) => { var activity = sender as IActivity; if (activity == null) { return; } Logger.Info( $"{activity.Metadata.ActivityType}({activity.Metadata.InstanceId}) processed model: {eventArgs.Context.InputModel.CorrelationId}"); }; using (var pipeline = new CustomerReviewDataPipeline(dataProvider, activityHub)) { pipeline.Start(); } Logger.Info(@"Customer review data pipeline started."); }
/// <summary> /// Processes the model asynchronous. /// </summary> /// <param name="activityContext">The activity context.</param> /// <returns> /// The output model. /// </returns> protected override Task <EmptyModel> ProcessModelAsync(ActivityContext activityContext) { var inputModel = activityContext.GetInputModel <CustomerReviewSentencesTagWeightModel>(); var entities = CustomerReviewSentencesTagWeightTranslator.ToEntities(inputModel); using (var dbContext = new CustomerReviewDbContext(this.databaseConnectionString)) { dbContext.Configuration.AutoDetectChangesEnabled = false; dbContext.ProductReviewSentenceTags.AddRange(entities); dbContext.SaveChanges(); } return(Task.FromResult(new EmptyModel(inputModel.CorrelationId))); }
/// <summary> /// Gets the models. /// </summary> /// <param name="pagingInfo">The paging information.</param> /// <returns> /// The data provider result. /// </returns> public override DataProviderResult GetModels(PagingInfo pagingInfo = null) { using (var dbContext = new CustomerReviewDbContext(this.databaseConnectionString)) { if (pagingInfo == null) { var totalCount = dbContext.ProductReviews.Count(); pagingInfo = new PagingInfo(totalCount, DefaultPageSize); } var resultModels = dbContext.ProductReviews.AsNoTracking() .OrderBy(e => e.Id) .Skip(pagingInfo.PageIndex * pagingInfo.PageSize) .Take(pagingInfo.PageSize) .Select(CustomerReviewTranslator.FromDbEntity) .ToList(); return(new DataProviderResult(resultModels, pagingInfo)); } }