@@ -32,23 +32,43 @@ public static ITriggerSession CreateTriggerSession(this DbContext dbContext, ISe
3232 }
3333
3434 /// <summary>
35- /// Calls dbContext.SaveChanges without invoking triggers
35+ /// Creates a <c>ITriggerSession</c> that can be used to manually invoke triggers
3636 /// </summary>
37- public static int SaveChangesWithoutTriggers ( this DbContext dbContext , bool acceptAllChangesOnSuccess = true )
37+ public static ITriggerSession CreateTriggerSession ( this DbContext dbContext , Func < TriggerConfiguration , TriggerConfiguration > configurator , IServiceProvider ? serviceProvider = null )
3838 {
3939 var triggerService = GetTriggerService ( dbContext ) ;
40- var initialConfiguration = triggerService . Configuration ;
40+ var configuration = configurator ( triggerService . Configuration ) ;
4141
42- try
43- {
44- triggerService . Configuration = initialConfiguration with { Disabled = true } ;
42+ return triggerService . CreateSession ( dbContext , configuration , serviceProvider ) ;
43+ }
4544
46- return dbContext . SaveChanges ( acceptAllChangesOnSuccess ) ;
47- }
48- finally
45+
46+ /// <summary>
47+ /// Creates a new <c>ITriggerSession</c> that can be used to manually invoke triggers. Throws if a TriggerSession is already active
48+ /// </summary>
49+ public static ITriggerSession CreateNewTriggerSession ( this DbContext dbContext , Func < TriggerConfiguration , TriggerConfiguration > ? configurator = null , IServiceProvider ? serviceProvider = null )
50+ {
51+ var triggerService = GetTriggerService ( dbContext ) ;
52+ if ( triggerService . Current is not null )
4953 {
50- triggerService . Configuration = initialConfiguration ;
54+ throw new InvalidOperationException ( "A triggerSession has already been created" ) ;
5155 }
56+
57+ var configuration = configurator ? . Invoke ( triggerService . Configuration ) ?? triggerService . Configuration ;
58+
59+ return triggerService . CreateSession ( dbContext , configuration , serviceProvider ) ;
60+ }
61+
62+ /// <summary>
63+ /// Calls dbContext.SaveChanges without invoking triggers
64+ /// </summary>
65+ public static int SaveChangesWithoutTriggers ( this DbContext dbContext , bool acceptAllChangesOnSuccess = true )
66+ {
67+ CreateNewTriggerSession ( dbContext , configuration => configuration with {
68+ Disabled = true
69+ } ) ;
70+
71+ return dbContext . SaveChanges ( acceptAllChangesOnSuccess ) ;
5272 }
5373
5474 /// <summary>
@@ -62,19 +82,11 @@ public static Task<int> SaveChangesWithoutTriggersAsync(this DbContext dbContext
6282 /// </summary>
6383 public static Task < int > SaveChangesWithoutTriggersAsync ( this DbContext dbContext , bool acceptAllChangesOnSuccess , CancellationToken cancellationToken = default )
6484 {
65- var triggerService = GetTriggerService ( dbContext ) ;
66- var initialConfiguration = triggerService . Configuration ;
67-
68- try
69- {
70- triggerService . Configuration = initialConfiguration with { Disabled = true } ;
85+ CreateNewTriggerSession ( dbContext , configuration => configuration with {
86+ Disabled = true
87+ } ) ;
7188
72- return dbContext . SaveChangesAsync ( acceptAllChangesOnSuccess , cancellationToken ) ;
73- }
74- finally
75- {
76- triggerService . Configuration = initialConfiguration ;
77- }
89+ return dbContext . SaveChangesAsync ( acceptAllChangesOnSuccess , cancellationToken ) ;
7890 }
7991 }
8092}
0 commit comments