Skip to content

Commit 90bb15a

Browse files
authored
Merge pull request #33 from koenbeuk/feature/triggered-db-context-perf
Disable AutoDetectChanges when invoking beforeSaveTriggers for perf
2 parents c24843a + 1f3b436 commit 90bb15a

File tree

1 file changed

+33
-7
lines changed

1 file changed

+33
-7
lines changed

src/EntityFrameworkCore.Triggered/TriggeredDbContext.cs

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,22 @@ public override int SaveChanges(bool acceptAllChangesOnSuccess)
5757

5858
try
5959
{
60-
_triggerSession.RaiseBeforeSaveTriggers(default).GetAwaiter().GetResult();
61-
_triggerSession.CaptureDiscoveredChanges();
62-
var result = base.SaveChanges(acceptAllChangesOnSuccess);
60+
int result;
61+
var defaultAutoDetectChangesEnabled = ChangeTracker.AutoDetectChangesEnabled;
62+
63+
try
64+
{
65+
ChangeTracker.AutoDetectChangesEnabled = false;
66+
67+
_triggerSession.RaiseBeforeSaveTriggers(default).GetAwaiter().GetResult();
68+
_triggerSession.CaptureDiscoveredChanges();
69+
result = base.SaveChanges(acceptAllChangesOnSuccess);
70+
}
71+
finally
72+
{
73+
ChangeTracker.AutoDetectChangesEnabled = defaultAutoDetectChangesEnabled;
74+
}
75+
6376
_triggerSession.RaiseAfterSaveTriggers(default).GetAwaiter().GetResult();
6477

6578
return result;
@@ -86,10 +99,23 @@ public override async Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess,
8699
try
87100
{
88101

89-
await _triggerSession.RaiseBeforeSaveTriggers(cancellationToken).ConfigureAwait(false);
90-
_triggerSession.CaptureDiscoveredChanges();
91-
var result = base.SaveChanges(acceptAllChangesOnSuccess);
92-
await _triggerSession.RaiseAfterSaveTriggers(cancellationToken).ConfigureAwait(false);
102+
int result;
103+
var defaultAutoDetectChangesEnabled = ChangeTracker.AutoDetectChangesEnabled;
104+
105+
try
106+
{
107+
ChangeTracker.AutoDetectChangesEnabled = false;
108+
109+
_triggerSession.RaiseBeforeSaveTriggers(default).GetAwaiter().GetResult();
110+
_triggerSession.CaptureDiscoveredChanges();
111+
result = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
112+
}
113+
finally
114+
{
115+
ChangeTracker.AutoDetectChangesEnabled = defaultAutoDetectChangesEnabled;
116+
}
117+
118+
_triggerSession.RaiseAfterSaveTriggers(default).GetAwaiter().GetResult();
93119

94120
return result;
95121
}

0 commit comments

Comments
 (0)