public async Task It_should_rollback_both_entity_and_change_log_within_async_flow() { // Given var id = Guid.NewGuid(); var user = new UserAggregate(id, "Bond"); var changeLog = user.Changes.GetUncommittedChanges().ToList(); using var db = NewDbContext(); db.Users.Add(user); await db.SaveChangesAsync(); // When using (var tran = TransactionExt.BeginAsync(IsolationLevel.ReadCommitted)) { user.Rename("James Bond"); await db.SaveChangesAsync(); } // Then db.DetachAll(); var savedUser = await db.Users.FindAsync(id); var savedChangeLog = await LoadChangeLog(user.StreamId); savedUser.Should().BeEquivalentTo(new UserAggregate(id, "Bond")); savedChangeLog.Should().HaveSameCount(changeLog); for (var i = 0; i < savedChangeLog.Count; i++) { savedChangeLog[i].Should().BeEquivalentTo((object)changeLog[i]); savedChangeLog[i].Should().BeOfType(changeLog[i].GetType()); } }
protected async Task InsertUserInTransaction(UserAggregate user, Task beforeTransactionDone) { await Task.Yield(); using var transaction = TransactionExt.BeginAsync(IsolationLevel.ReadCommitted); using var db = NewDbContext(); db.Users.Add(user); await db.SaveChangesAsync(); await beforeTransactionDone; transaction.Complete(); }