/// <inheritdoc /> public virtual async Task SetRelationshipAsync(TId primaryId, string relationshipName, object secondaryResourceIds, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { primaryId, relationshipName, secondaryResourceIds }); if (relationshipName == null) { throw new ArgumentNullException(nameof(relationshipName)); } AssertHasRelationship(_request.Relationship, relationshipName); TResource resourceFromDatabase = await GetPrimaryResourceForUpdateAsync(primaryId, cancellationToken); _hookExecutor.BeforeUpdateRelationship(resourceFromDatabase); try { await _repositoryAccessor.SetRelationshipAsync(resourceFromDatabase, secondaryResourceIds, cancellationToken); } catch (DataStoreUpdateException) { await AssertResourcesExistAsync(TypeHelper.ExtractResources(secondaryResourceIds), cancellationToken); throw; } _hookExecutor.AfterUpdateRelationship(resourceFromDatabase); }
/// <inheritdoc /> public virtual async Task SetRelationshipAsync(TId primaryId, string relationshipName, object secondaryResourceIds, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { primaryId, relationshipName, secondaryResourceIds }); ArgumentGuard.NotNullNorEmpty(relationshipName, nameof(relationshipName)); AssertHasRelationship(_request.Relationship, relationshipName); TResource resourceFromDatabase = await GetPrimaryResourceForUpdateAsync(primaryId, cancellationToken); await _resourceDefinitionAccessor.OnPrepareWriteAsync(resourceFromDatabase, OperationKind.SetRelationship, cancellationToken); _hookExecutor.BeforeUpdateRelationship(resourceFromDatabase); try { await _repositoryAccessor.SetRelationshipAsync(resourceFromDatabase, secondaryResourceIds, cancellationToken); } catch (DataStoreUpdateException) { await AssertRightResourcesExistAsync(secondaryResourceIds, cancellationToken); throw; } _hookExecutor.AfterUpdateRelationship(resourceFromDatabase); }