public static StateDetailDto ToStateDetailDto(this StateDetail stateDetail, string businessEntityId) => new StateDetailDto { Id = stateDetail.Id, BusinessEntityId = businessEntityId, State = stateDetail.State, TimeStampUtc = stateDetail.TimeStampUtc };
public async Task AddStateDetailUsingCustomOutbox(string businessEntityId, StateDetail detail) { var dto = detail.ToStateDetailDto(businessEntityId); // begin DB transaction await using var transaction = await _stateDetailContext.Database.BeginTransactionAsync(); _outboxMessageBus.SetTransaction(transaction); // persist new state details to DB dto.TimeStampUtc = DateTime.UtcNow; dto = (await _stateDetailContext.StateDetails.AddAsync(dto)).Entity; await _stateDetailContext.SaveChangesAsync(); // publish message to outbox message bus var stateDetail = dto.ToStateDetail(); _outboxMessageBus.Publish(nameof(StateUpdated), new StateUpdated { BusinessEntityId = dto.BusinessEntityId, Details = stateDetail }); // commit transaction await transaction.CommitAsync(); }
public async Task <IActionResult> UpdateStateUsingNServiceBusOutbox(string businessEntityId, [FromBody] StateDetail details) { await _commandService.AddStateDetailUsingNServiceBusOutbox(businessEntityId, details); return(Ok()); }
// The outbox works only in an NServiceBus message handler public async Task AddStateDetailUsingNServiceBusOutbox(string businessEntityId, StateDetail detail) => await _messageSession.SendLocal(new UpdateState { BusinessEntityId = businessEntityId, Details = detail });