public async Task <WorkflowResult> AddPriceDetailAsync(int priceCategoryId, string description, decimal unitPrice) { using (TransactionScope transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { try { WorkflowResult workflowResult = await _decorated.AddPriceDetailAsync(priceCategoryId, description, unitPrice); if (workflowResult.Success) { transactionScope.Complete(); } else { Transaction.Current.Rollback(); } return(workflowResult); } catch { Transaction.Current.Rollback(); throw; } } }
public async Task <ActionResult> OnPostAddPriceDetailAsync([FromServices] IProductComponentFactory productComponentFactory) { try { ModelState.Clear(); if (!TryValidateModel(AddPriceDetailRequest)) { return(Page()); } Option <IProductComponent> productResult = await productComponentFactory.CurrentAsync(Id); if (!productResult.Any()) { ModelState.TryAddModelError("", "Error, registro no existe en bd"); } IProductComponent product = productResult.Single(); WorkflowResult result = await product.AddPriceDetailAsync(AddPriceDetailRequest.PriceCategoryId, AddPriceDetailRequest.Description, AddPriceDetailRequest.UnitPrice); if (!result.Success) { for (int i = 0; i < result.Errors.Length; i++) { ModelState.TryAddModelError("", result.Errors[i]); } } return(Page()); } finally { AditionalService = new AddAditionalServiceRequest(); Product = await _productQueryComponent.ProductAsync(Id); } }