Browse Source

Dispatching Domain Events right before DbContext SaveChanges() so side effects from additional Domain Event Handlers are included within the same transaction

pull/130/head
Cesar De la Torre 7 years ago
parent
commit
cb4da9864d
1 changed files with 10 additions and 2 deletions
  1. +10
    -2
      src/Services/Ordering/Ordering.Infrastructure/OrderingContext.cs

+ 10
- 2
src/Services/Ordering/Ordering.Infrastructure/OrderingContext.cs View File

@ -237,10 +237,18 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Infrastructure
public async Task<int> SaveEntitiesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
// Dispatch Domain Events collection.
// Choices:
// A) Right BEFORE committing data (EF SaveChanges) into the DB will make a single transaction including
// side effects from the domain event handlers which are using the same DbContext with "InstancePerLifetimeScope" or "scoped" lifetime
// B) Right AFTER committing data (EF SaveChanges) into the DB. will make multiple transactions.
// You will need to handle eventual consistency and compensatory actions in case of failures.
await _mediator.DispatchDomainEventsAsync(this);
// After executing this line all the changes performed thought the DbContext will be commited
var result = await base.SaveChangesAsync();
// Dispatch the Domain Events collection right after saving/committing data into the database
await _mediator.DispatchDomainEventsAsync(this);
return result;
}
}


Loading…
Cancel
Save