Skip to content

Commit 2802d23

Browse files
author
Bart Koelman
committed
Optimization: Only save when there are changes in a remove-from-to-many relationship request
1 parent b76629d commit 2802d23

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -500,15 +500,18 @@ public virtual async Task RemoveFromToManyRelationshipAsync(TResource leftResour
500500
HashSet<IIdentifiable> rightResourceIdsToStore = rightResourceIdsStored.ToHashSet(IdentifiableComparer.Instance);
501501
rightResourceIdsToStore.ExceptWith(rightResourceIdsToRemove);
502502

503-
AssertIsNotClearingRequiredToOneRelationship(relationship, leftResourceTracked, rightResourceIdsToStore);
503+
if (!rightResourceIdsToStore.SetEquals(rightResourceIdsStored))
504+
{
505+
AssertIsNotClearingRequiredToOneRelationship(relationship, leftResourceTracked, rightResourceIdsToStore);
504506

505-
await UpdateRelationshipAsync(relationship, leftResourceTracked, rightResourceIdsToStore, cancellationToken);
507+
await UpdateRelationshipAsync(relationship, leftResourceTracked, rightResourceIdsToStore, cancellationToken);
506508

507-
await _resourceDefinitionAccessor.OnWritingAsync(leftResourceTracked, WriteOperationKind.RemoveFromRelationship, cancellationToken);
509+
await _resourceDefinitionAccessor.OnWritingAsync(leftResourceTracked, WriteOperationKind.RemoveFromRelationship, cancellationToken);
508510

509-
await SaveChangesAsync(cancellationToken);
511+
await SaveChangesAsync(cancellationToken);
510512

511-
await _resourceDefinitionAccessor.OnWriteSucceededAsync(leftResourceTracked, WriteOperationKind.RemoveFromRelationship, cancellationToken);
513+
await _resourceDefinitionAccessor.OnWriteSucceededAsync(leftResourceTracked, WriteOperationKind.RemoveFromRelationship, cancellationToken);
514+
}
512515
}
513516
}
514517

0 commit comments

Comments
 (0)