Skip to content

Commit f49ab3e

Browse files
authored
Update README.md
1 parent 87e257b commit f49ab3e

1 file changed

Lines changed: 16 additions & 7 deletions

File tree

README.md

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,18 +145,27 @@ using var tx = context.Database.BeginTransaction();
145145
var triggerService = context.GetService<ITriggerService>(); // ITriggerService is responsible for creating now trigger sessions (see below)
146146
var triggerSession = triggerService.CreateSession(context); // A trigger session keeps track of all changes that are relevant within that session. e.g. RaiseAfterSaveTriggers will only raise triggers on changes it discovered within this session (through RaiseBeforeSaveTriggers)
147147
148-
triggerSession.RaiseBeforeSaveTriggers();
149-
context.SaveChanges();
150-
triggerSession.RaiseAfterSaveTriggers();
148+
await triggerSession.RaiseBeforeSaveTriggers();
151149

152-
await context.RaiseBeforeCommitTriggers();
153-
context.Commit();
154-
await context.RaiseAfterCommitTriggers();
150+
try {
151+
await context.SaveChangesAsync();
152+
await triggerSession.RaiseAfterSaveTriggers();
153+
}
154+
catch {
155+
await triggerSession.RaiseBeforeRollbackTriggers();
156+
await context.RollbackAsync();
157+
await triggerSession.RaiseAfterRollbackTriggers();
158+
throw;
159+
}
160+
161+
await triggerSession.RaiseBeforeCommitTriggers();
162+
await context.CommitAsync();
163+
await triggerSession.RaiseAfterCommitTriggers();
155164
```
156165
In this example we were not able to inherit from TriggeredDbContext since we want to manually control the TriggerSession
157166

158167
### Custom trigger types
159-
By default we offer 3 trigger types: `IBeforeSaveTrigger`, `IAfterSaveTrigger` and `IAfterSaveFailedTrigger`. These will cover most cases. In addition we offer `IRaiseBeforeCommitTrigger` and `IRaiseAfterCommitTrigger` as an extension to further enhance your control of when triggers should run. We also offer support for custom triggers. Lets say we want to react to rollbacks of transactions. We can do so by creating a new interface: IRollbackTrigger and implementing an extension method for ITriggerSession to invoke triggers of that type. Please take a look at how [Transactional triggers](https://github.com/koenbeuk/EntityFrameworkCore.Triggered/tree/master/src/EntityFrameworkCore.Triggered.Transactions) are implemented as an example.
168+
By default we offer 3 trigger types: `IBeforeSaveTrigger`, `IAfterSaveTrigger` and `IAfterSaveFailedTrigger`. These will cover most cases. In addition we offer `IRaiseBeforeCommitTrigger` and `IRaiseAfterCommitTrigger` as an extension to further enhance your control of when triggers should run. We also offer support for custom triggers. Lets say we want to react to specific events happening in your context. We can do so by creating a new interface: IThisThingJustHappenedTrigger and implementing an extension method for ITriggerSession to invoke triggers of that type. Please take a look at how [Transactional triggers](https://github.com/koenbeuk/EntityFrameworkCore.Triggered/tree/master/src/EntityFrameworkCore.Triggered.Transactions) are implemented as an example.
160169

161170
### When you can't inherit from TriggeredDbContext
162171
```csharp

0 commit comments

Comments
 (0)