Skip to content

Commit 981c063

Browse files
authored
Merge pull request #161 from koenbeuk/trigger-refactoring
Introducting synchronous triggers.
2 parents a176cba + 8d92d2f commit 981c063

File tree

109 files changed

+1801
-1192
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+1801
-1192
lines changed

benchmarks/EntityFrameworkCore.Triggered.Benchmarks/Triggers/SetStudentRegistrationDateTrigger.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ namespace EntityFrameworkCore.Triggered.Benchmarks.Triggers
66
{
77
public class SetStudentRegistrationDateTrigger : IBeforeSaveTrigger<Student>
88
{
9-
public Task BeforeSave(ITriggerContext<Student> context, CancellationToken cancellationToken)
9+
public void BeforeSave(ITriggerContext<Student> context)
1010
{
1111
context.Entity.RegistrationDate = DateTimeOffset.Now;
12-
return Task.CompletedTask;
1312
}
1413
}
1514
}

benchmarks/EntityFrameworkCore.Triggered.Benchmarks/Triggers/SignStudentUpForMandatoryCourses.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public SignStudentUpForMandatoryCourses(TriggeredApplicationContext applicationC
1313
_applicationContext = applicationContext;
1414
}
1515

16-
public Task BeforeSave(ITriggerContext<Student> context, CancellationToken cancellationToken)
16+
public void BeforeSave(ITriggerContext<Student> context)
1717
{
1818
var mandatoryCourses = _applicationContext.Courses.Where(x => x.IsMandatory).ToList();
1919

@@ -24,8 +24,6 @@ public Task BeforeSave(ITriggerContext<Student> context, CancellationToken cance
2424
StudentId = context.Entity.Id
2525
});
2626
}
27-
28-
return Task.CompletedTask;
2927
}
3028
}
3129
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System.Threading;
2+
using System.Threading.Tasks;
3+
4+
namespace EntityFrameworkCore.Triggered
5+
{
6+
public interface IAfterSaveAsyncTrigger<TEntity>
7+
where TEntity : class
8+
{
9+
Task AfterSaveAsync(ITriggerContext<TEntity> context, CancellationToken cancellationToken);
10+
}
11+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
5+
namespace EntityFrameworkCore.Triggered
6+
{
7+
public interface IAfterSaveFailedAsyncTrigger<TEntity>
8+
where TEntity : class
9+
{
10+
Task AfterSaveFailedAsync(ITriggerContext<TEntity> context, Exception exception, CancellationToken cancellationToken);
11+
}
12+
13+
14+
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
using System;
2-
using System.Threading;
3-
using System.Threading.Tasks;
42

53
namespace EntityFrameworkCore.Triggered
64
{
75
public interface IAfterSaveFailedTrigger<TEntity>
86
where TEntity : class
97
{
10-
Task AfterSaveFailed(ITriggerContext<TEntity> context, Exception exception, CancellationToken cancellationToken);
8+
void AfterSaveFailed(ITriggerContext<TEntity> context, Exception exception);
119
}
10+
11+
1212
}
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
using System.Threading;
2-
using System.Threading.Tasks;
3-
4-
namespace EntityFrameworkCore.Triggered
1+
namespace EntityFrameworkCore.Triggered
52
{
63
public interface IAfterSaveTrigger<TEntity>
74
where TEntity : class
85
{
9-
Task AfterSave(ITriggerContext<TEntity> context, CancellationToken cancellationToken);
6+
void AfterSave(ITriggerContext<TEntity> context);
107
}
118
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System.Threading;
2+
using System.Threading.Tasks;
3+
4+
namespace EntityFrameworkCore.Triggered
5+
{
6+
public interface IBeforeSaveAsyncTrigger<in TEntity>
7+
where TEntity : class
8+
{
9+
Task BeforeSaveAsync(ITriggerContext<TEntity> context, CancellationToken cancellationToken);
10+
}
11+
}
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
using System.Threading;
2-
using System.Threading.Tasks;
3-
4-
namespace EntityFrameworkCore.Triggered
1+
namespace EntityFrameworkCore.Triggered
52
{
63
public interface IBeforeSaveTrigger<in TEntity>
74
where TEntity : class
85
{
9-
Task BeforeSave(ITriggerContext<TEntity> context, CancellationToken cancellationToken);
6+
void BeforeSave(ITriggerContext<TEntity> context);
107
}
118
}

src/EntityFrameworkCore.Triggered.Abstractions/ITriggerSession.cs

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,55 @@ public interface ITriggerSession : IDisposable
1010
/// Discoveres any new pending changes in the DbContext
1111
/// </summary>
1212
void DiscoverChanges();
13-
Task RaiseBeforeSaveStartingTriggers(CancellationToken cancellationToken = default);
14-
Task RaiseBeforeSaveCompletedTriggers(CancellationToken cancellationToken = default);
15-
Task RaiseAfterSaveFailedStartingTriggers(Exception exception, CancellationToken cancellationToken = default);
16-
Task RaiseAfterSaveFailedCompletedTriggers(Exception exception, CancellationToken cancellationToken = default);
17-
Task RaiseAfterSaveStartingTriggers(CancellationToken cancellationToken = default);
18-
Task RaiseAfterSaveCompletedTriggers(CancellationToken cancellationToken = default);
13+
void RaiseBeforeSaveStartingTriggers();
14+
void RaiseBeforeSaveCompletedTriggers();
15+
void RaiseAfterSaveFailedStartingTriggers(Exception exception);
16+
void RaiseAfterSaveFailedCompletedTriggers(Exception exception);
17+
void RaiseAfterSaveStartingTriggers();
18+
void RaiseAfterSaveCompletedTriggers();
19+
Task RaiseBeforeSaveStartingAsyncTriggers(CancellationToken cancellationToken = default);
20+
Task RaiseBeforeSaveCompletedAsyncTriggers(CancellationToken cancellationToken = default);
21+
Task RaiseAfterSaveFailedStartingAsyncTriggers(Exception exception, CancellationToken cancellationToken = default);
22+
Task RaiseAfterSaveFailedCompletedAsyncTriggers(Exception exception, CancellationToken cancellationToken = default);
23+
Task RaiseAfterSaveStartingAsyncTriggers(CancellationToken cancellationToken = default);
24+
Task RaiseAfterSaveCompletedAsyncTriggers(CancellationToken cancellationToken = default);
1925
/// <summary>
2026
/// Makes a snapshot of all changes in the DbContext and invokes BeforeSaveTriggers while detecting and cascading based on the cascade settings until all changes have been processed
2127
/// </summary>
22-
Task RaiseBeforeSaveTriggers(CancellationToken cancellationToken = default);
28+
void RaiseBeforeSaveTriggers();
29+
/// <summary>
30+
/// Makes a snapshot of all changes in the DbContext and invokes BeforeSaveTriggers while detecting and cascading based on the cascade settings until all changes have been processed
31+
/// </summary>
32+
Task RaiseBeforeSaveAsyncTriggers(CancellationToken cancellationToken = default);
33+
/// <summary>
34+
/// Makes a snapshot of all changes in the DbContext and invokes BeforeSaveTriggers while detecting and cascading based on the cascade settings until all changes have been processed
35+
/// </summary>
36+
/// <param name="skipDetectedChanges">Allows BeforeSaveTriggers not to include previously detected changes. Only new changes will be detected and fired upon. This is useful in case of multiple calls to RaiseBeforeSaveTriggers</param>
37+
void RaiseBeforeSaveTriggers(bool skipDetectedChanges);
2338
/// <summary>
2439
/// Makes a snapshot of all changes in the DbContext and invokes BeforeSaveTriggers while detecting and cascading based on the cascade settings until all changes have been processed
2540
/// </summary>
2641
/// <param name="skipDetectedChanges">Allows BeforeSaveTriggers not to include previously detected changes. Only new changes will be detected and fired upon. This is useful in case of multiple calls to RaiseBeforeSaveTriggers</param>
27-
Task RaiseBeforeSaveTriggers(bool skipDetectedChanges, CancellationToken cancellationToken = default);
42+
Task RaiseBeforeSaveAsyncTriggers(bool skipDetectedChanges, CancellationToken cancellationToken = default);
2843
/// <summary>
2944
/// Captures and locks all discovered changes
3045
/// </summary>
3146
void CaptureDiscoveredChanges();
3247
/// <summary>
3348
/// Invokes AfterSaveTriggers. Calling this method expects that either RaiseBeforeSaveTriggers() or DiscoverChanges() has been called
3449
/// </summary>
35-
Task RaiseAfterSaveTriggers(CancellationToken cancellationToken = default);
50+
void RaiseAfterSaveTriggers();
51+
/// <summary>
52+
/// Invokes AfterSaveTriggers. Calling this method expects that either RaiseBeforeSaveTriggers() or DiscoverChanges() has been called
53+
/// </summary>
54+
Task RaiseAfterSaveAsyncTriggers(CancellationToken cancellationToken = default);
55+
/// <summary>
56+
/// Invokes AfterSaveFailedTriggers. Calling this method expects that either RaiseBeforeSaveTriggers() or DiscoverChanges() has been called
57+
/// </summary>
58+
void RaiseAfterSaveFailedTriggers(Exception exception);
3659
/// <summary>
3760
/// Invokes AfterSaveFailedTriggers. Calling this method expects that either RaiseBeforeSaveTriggers() or DiscoverChanges() has been called
3861
/// </summary>
39-
Task RaiseAfterSaveFailedTriggers(Exception exception, CancellationToken cancellationToken = default);
62+
Task RaiseAfterSaveFailedAsyncTriggers(Exception exception, CancellationToken cancellationToken = default);
4063
}
4164
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Threading;
2+
using System.Threading.Tasks;
3+
4+
namespace EntityFrameworkCore.Triggered.Lifecycles
5+
{
6+
public interface IAfterSaveCompletedAsyncTrigger
7+
{
8+
Task AfterSaveCompletedAsync(CancellationToken cancellationToken);
9+
}
10+
}

0 commit comments

Comments
 (0)