Skip to content

Commit 4520847

Browse files
committed
Normalized cascade/cascading by deriving from EF cores use
1 parent 7afb1fe commit 4520847

20 files changed

+73
-73
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,11 @@ public class Startup
9494
`BeforeSaveTrigger<TEntity>` supports cascading triggers. This is useful since it allows your triggers to subsequently modify the same DbContext entity graph and have it raise additional triggers. By default this behavior is turned on and protected from infinite loops by limiting the number of cascading cycles. If you don't like this behavior or want to change it, you can do so by:
9595
```csharp
9696
optionsBuilder.UseTriggers(triggerOptions => {
97-
triggerOptions.CascadingMode(CascadingMode.EntityAndType).MaxRecusion(20)
97+
triggerOptions.CascadeBehavior(CascadeBehavior.EntityAndType).MaxRecusion(20)
9898
})
9999
```
100100

101-
Currently there are 2 types of cascading strategies out of the box, with the support to providing your own: `NoCascading` and `EntityAndType` (default). The former simply disables cascading whereas the latter cascades triggers for as long as the combination of the Entity and the change type is unique. `EntityAndType` is the recommended and default cascading strategy.
101+
Currently there are 2 types of cascading strategies out of the box, with the support to providing your own: `NoCascade` and `EntityAndType` (default). The former simply disables cascading whereas the latter cascades triggers for as long as the combination of the Entity and the change type is unique. `EntityAndType` is the recommended and default cascading strategy.
102102

103103
### Inheritance
104104
Triggers support inheritance and sort execution of these triggers based on least concrete to most concrete. Given the following example:

src/EntityFrameworkCore.Triggered/Infrastructure/CascadingMode.cs renamed to src/EntityFrameworkCore.Triggered/Infrastructure/CascadeBehavior.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace EntityFrameworkCore.Triggered.Infrastructure
22
{
3-
public enum CascadingMode
3+
public enum CascadeBehavior
44
{
55
/// <summary>
66
/// Disables cascading. Any changes made in <see cref="EntityFrameworkCore.Triggered.IBeforeSaveTrigger{TEntity}"/> will not raise additional triggers

src/EntityFrameworkCore.Triggered/Infrastructure/Internal/TriggersOptionExtension.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using EntityFrameworkCore.Triggered.Internal;
5-
using EntityFrameworkCore.Triggered.Internal.CascadingStrategies;
5+
using EntityFrameworkCore.Triggered.Internal.CascadeStrategies;
66
using EntityFrameworkCore.Triggered.Lyfecycles;
77
using Microsoft.EntityFrameworkCore.Diagnostics;
88
using Microsoft.EntityFrameworkCore.Infrastructure;
@@ -61,8 +61,8 @@ public override long GetServiceProviderHashCode()
6161
}
6262
}
6363

64-
hashCode ^= extension._maxCascadingCycles.GetHashCode();
65-
hashCode ^= extension._cascadingMode.GetHashCode();
64+
hashCode ^= extension._maxCascadeCycles.GetHashCode();
65+
hashCode ^= extension._cascadeBehavior.GetHashCode();
6666

6767
if (extension._serviceProviderTransform != null)
6868
{
@@ -84,16 +84,16 @@ public override void PopulateDebugInfo(IDictionary<string, string> debugInfo)
8484

8585
debugInfo["Triggers:TriggersCount"] = (((TriggersOptionExtension)Extension)._triggers?.Count() ?? 0).ToString();
8686
debugInfo["Triggers:TriggerTypesCount"] = (((TriggersOptionExtension)Extension)._triggerTypes?.Count() ?? 0).ToString();
87-
debugInfo["Triggers:MaxCascadingCycles"] = ((TriggersOptionExtension)Extension)._maxCascadingCycles.ToString();
88-
debugInfo["Triggers:CascadingMode"] = ((TriggersOptionExtension)Extension)._cascadingMode.ToString();
87+
debugInfo["Triggers:MaxCascadeCycles"] = ((TriggersOptionExtension)Extension)._maxCascadeCycles.ToString();
88+
debugInfo["Triggers:CascadeBehavior"] = ((TriggersOptionExtension)Extension)._cascadeBehavior.ToString();
8989
}
9090
}
9191

9292
private ExtensionInfo? _info;
9393
private IEnumerable<(object typeOrInstance, ServiceLifetime lifetime)>? _triggers;
9494
private IEnumerable<Type> _triggerTypes;
95-
private int _maxCascadingCycles = 100;
96-
private CascadingMode _cascadingMode = CascadingMode.EntityAndType;
95+
private int _maxCascadeCycles = 100;
96+
private CascadeBehavior _cascadeBehavior = CascadeBehavior.EntityAndType;
9797
private Func<IServiceProvider, IServiceProvider>? _serviceProviderTransform;
9898

9999
public TriggersOptionExtension()
@@ -119,16 +119,16 @@ public TriggersOptionExtension(TriggersOptionExtension copyFrom)
119119
}
120120

121121
_triggerTypes = copyFrom._triggerTypes;
122-
_maxCascadingCycles = copyFrom._maxCascadingCycles;
123-
_cascadingMode = copyFrom._cascadingMode;
122+
_maxCascadeCycles = copyFrom._maxCascadeCycles;
123+
_cascadeBehavior = copyFrom._cascadeBehavior;
124124
_serviceProviderTransform = copyFrom._serviceProviderTransform;
125125
}
126126

127127
public DbContextOptionsExtensionInfo Info
128128
=> _info ??= new ExtensionInfo(this);
129129

130-
public int MaxCascadingCycles => _maxCascadingCycles;
131-
public CascadingMode CascadingMode => _cascadingMode;
130+
public int MaxCascadeCycles => _maxCascadeCycles;
131+
public CascadeBehavior CascadeBehavior => _cascadeBehavior;
132132
public IEnumerable<(object typeOrInstance, ServiceLifetime lifetime)> Triggers => _triggers ?? Enumerable.Empty<(object typeOrInstance, ServiceLifetime lifetime)>();
133133

134134
public void ApplyServices(IServiceCollection services)
@@ -153,17 +153,17 @@ public void ApplyServices(IServiceCollection services)
153153

154154

155155
services.Configure<TriggerOptions>(triggerServiceOptions => {
156-
triggerServiceOptions.MaxCascadingCycles = _maxCascadingCycles;
156+
triggerServiceOptions.MaxCascadeCycles = _maxCascadeCycles;
157157
});
158158

159-
var cascadingStrategyType = _cascadingMode switch
159+
var cascadeStrategyType = _cascadeBehavior switch
160160
{
161-
CascadingMode.None => typeof(NoCascadingStrategy),
162-
CascadingMode.EntityAndType => typeof(EntityAndTypeCascadingStrategy),
161+
CascadeBehavior.None => typeof(NoCascadeStrategy),
162+
CascadeBehavior.EntityAndType => typeof(EntityAndTypeCascadeStrategy),
163163
_ => throw new InvalidOperationException("Unsupported cascading mode")
164164
};
165165

166-
services.TryAddTransient(typeof(ICascadingStrategy), cascadingStrategyType);
166+
services.TryAddTransient(typeof(ICascadeStrategy), cascadeStrategyType);
167167

168168
if (_triggers != null)
169169
{
@@ -221,20 +221,20 @@ private bool TypeIsValidTrigger(Type type)
221221
}
222222
}
223223

224-
public TriggersOptionExtension WithCascadingMode(CascadingMode cascadingMode)
224+
public TriggersOptionExtension WithCascadeBehavior(CascadeBehavior cascadeBehavior)
225225
{
226226
var clone = Clone();
227227

228-
clone._cascadingMode = cascadingMode;
228+
clone._cascadeBehavior = cascadeBehavior;
229229

230230
return clone;
231231
}
232232

233-
public TriggersOptionExtension WithMaxCascadingCycles(int maxCascadingCycles)
233+
public TriggersOptionExtension WithMaxCascadeCycles(int maxCascadeCycles)
234234
{
235235
var clone = Clone();
236236

237-
clone._maxCascadingCycles = maxCascadingCycles;
237+
clone._maxCascadeCycles = maxCascadeCycles;
238238

239239
return clone;
240240
}

src/EntityFrameworkCore.Triggered/Infrastructure/TriggersContextOptionsBuilder.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ public TriggersContextOptionsBuilder AddTrigger(Type triggerType, ServiceLifetim
2727
public TriggersContextOptionsBuilder AddTrigger(object trigger)
2828
=> WithOption(e => e.WithAdditionalTrigger(trigger));
2929

30-
public TriggersContextOptionsBuilder CascadingMode(CascadingMode cascadingMode = Infrastructure.CascadingMode.EntityAndType)
31-
=> WithOption(e => e.WithCascadingMode(cascadingMode));
30+
public TriggersContextOptionsBuilder CascadeBehavior(CascadeBehavior cascadeBehavior = Infrastructure.CascadeBehavior.EntityAndType)
31+
=> WithOption(e => e.WithCascadeBehavior(cascadeBehavior));
3232

33-
public TriggersContextOptionsBuilder MaxCascadingCycles(int maxCascadingCycles = 100)
34-
=> WithOption(e => e.WithMaxCascadingCycles(maxCascadingCycles));
33+
public TriggersContextOptionsBuilder MaxCascadeCycles(int maxCascadingCycles = 100)
34+
=> WithOption(e => e.WithMaxCascadeCycles(maxCascadingCycles));
3535

3636
public TriggersContextOptionsBuilder AddTriggerType(Type triggerType)
3737
=> WithOption(e => e.WithAdditionalTriggerType(triggerType));

src/EntityFrameworkCore.Triggered/Internal/CascadingStrategies/EntityAndTypeCascadingStrategy.cs renamed to src/EntityFrameworkCore.Triggered/Internal/CascadeStrategies/EntityAndTypeCascadeStrategy.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Microsoft.EntityFrameworkCore.ChangeTracking;
22

3-
namespace EntityFrameworkCore.Triggered.Internal.CascadingStrategies
3+
namespace EntityFrameworkCore.Triggered.Internal.CascadeStrategies
44
{
5-
public class EntityAndTypeCascadingStrategy : ICascadingStrategy
5+
public class EntityAndTypeCascadeStrategy : ICascadeStrategy
66
{
77
public bool CanCascade(EntityEntry entry, ChangeType changeType, TriggerContextDescriptor previousTriggerContextDescriptor)
88
=> changeType != previousTriggerContextDescriptor.ChangeType;

src/EntityFrameworkCore.Triggered/Internal/CascadingStrategies/ICascadingStrategy.cs renamed to src/EntityFrameworkCore.Triggered/Internal/CascadeStrategies/ICascadeStrategy.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Microsoft.EntityFrameworkCore.ChangeTracking;
22

3-
namespace EntityFrameworkCore.Triggered.Internal.CascadingStrategies
3+
namespace EntityFrameworkCore.Triggered.Internal.CascadeStrategies
44
{
5-
public interface ICascadingStrategy
5+
public interface ICascadeStrategy
66
{
77
bool CanCascade(EntityEntry entry, ChangeType changeType, TriggerContextDescriptor previousTriggerContextDescriptor);
88
}

src/EntityFrameworkCore.Triggered/Internal/CascadingStrategies/NoCascadingStrategy.cs renamed to src/EntityFrameworkCore.Triggered/Internal/CascadeStrategies/NoCascadeStrategy.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Microsoft.EntityFrameworkCore.ChangeTracking;
22

3-
namespace EntityFrameworkCore.Triggered.Internal.CascadingStrategies
3+
namespace EntityFrameworkCore.Triggered.Internal.CascadeStrategies
44
{
5-
public class NoCascadingStrategy : ICascadingStrategy
5+
public class NoCascadeStrategy : ICascadeStrategy
66
{
77
public bool CanCascade(EntityEntry entry, ChangeType changeType, TriggerContextDescriptor previousTriggerContextDescriptor)
88
=> false;

src/EntityFrameworkCore.Triggered/Internal/CascadingTriggerContextDiscoveryStrategy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public CascadingTriggerContextDiscoveryStrategy(string name, bool skipDetectedCh
2828

2929
public IEnumerable<IEnumerable<TriggerContextDescriptor>> Discover(TriggerOptions options, TriggerContextTracker tracker, ILogger logger)
3030
{
31-
var maxCascadingCycles = options.MaxCascadingCycles;
31+
var maxCascadingCycles = options.MaxCascadeCycles;
3232
_discoveryStarted(logger, _name, maxCascadingCycles, null);
3333

3434
var iteration = 0;

src/EntityFrameworkCore.Triggered/Internal/TriggerContextTracker.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4-
using EntityFrameworkCore.Triggered.Internal.CascadingStrategies;
4+
using EntityFrameworkCore.Triggered.Internal.CascadeStrategies;
55
using Microsoft.EntityFrameworkCore;
66
using Microsoft.EntityFrameworkCore.ChangeTracking;
77

@@ -10,12 +10,12 @@ namespace EntityFrameworkCore.Triggered.Internal
1010
public sealed class TriggerContextTracker
1111
{
1212
readonly ChangeTracker _changeTracker;
13-
readonly ICascadingStrategy _cascadingStrategy;
13+
readonly ICascadeStrategy _cascadingStrategy;
1414

1515
List<TriggerContextDescriptor>? _discoveredChanges;
1616
List<int>? _capturedChangeIndexes;
1717

18-
public TriggerContextTracker(ChangeTracker changeTracker, ICascadingStrategy cascadingStrategy)
18+
public TriggerContextTracker(ChangeTracker changeTracker, ICascadeStrategy cascadingStrategy)
1919
{
2020
_changeTracker = changeTracker;
2121
_cascadingStrategy = cascadingStrategy;

src/EntityFrameworkCore.Triggered/TriggerOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
{
33
public class TriggerOptions
44
{
5-
public int MaxCascadingCycles { get; set; } = 100;
5+
public int MaxCascadeCycles { get; set; } = 100;
66
}
77
}

0 commit comments

Comments
 (0)