@@ -298,15 +298,23 @@ public virtual async Task<TEntity> UpdateAsync(TId id, TEntity entity)
298
298
299
299
if ( _jsonApiContext . RelationshipsToUpdate . Any ( ) )
300
300
{
301
- AttachRelationships ( oldEntity ) ;
302
301
foreach ( var relationship in _jsonApiContext . RelationshipsToUpdate )
303
302
{
304
- /// If we are updating to-many relations from PATCH, we need to include the relation first,
305
- /// else it will not peform a complete replacement, as required by the specs.
306
- /// Also, we currently do not support the same for many-to-many
303
+
307
304
if ( relationship . Key is HasManyAttribute && ! ( relationship . Key is HasManyThroughAttribute ) )
308
- await _context . Entry ( oldEntity ) . Collection ( relationship . Key . InternalRelationshipName ) . LoadAsync ( ) ;
309
- relationship . Key . SetValue ( oldEntity , relationship . Value ) ; // article.tags = nieuwe lijst
305
+ {
306
+ /// If we are updating to-many relations from PATCH, we need to include the relation first,
307
+ /// else it will not peform a complete replacement, as required by the specs.
308
+ relationship . Key . SetValue ( oldEntity , relationship . Value ) ;
309
+ } else if ( relationship . Key is HasManyThroughAttribute throughAttribute )
310
+ {
311
+ // If we're updating many-to-many, we only have to load the ArticleTags.
312
+ // The new value was already set in the AttachRelationships(oldEntity) call.
313
+ // @TODO: It it not consistent that for many-to-many, the new relation value
314
+ // is assigned in a helper function, whereas for one-to-many, it happens here.
315
+ await _context . Entry ( oldEntity ) . Collection ( throughAttribute . InternalThroughName ) . LoadAsync ( ) ;
316
+ AttachRelationships ( oldEntity ) ;
317
+ }
310
318
}
311
319
}
312
320
await _context . SaveChangesAsync ( ) ;
0 commit comments