web-dev-qa-db-fra.com

Suppression de plusieurs entités Framework

Il existe une relation plusieurs à plusieurs entre Artist et ArtistType. Je peux facilement ajouter un artiste ArtistType comme ci-dessous

foreach (var artistType in this._db.ArtistTypes
    .Where(artistType => vm.SelectedIds.Contains(artistType.ArtistTypeID)))
{
    artist.ArtistTypes.Add(artistType);
}

_db.ArtistDetails.Add(artist);
_db.SaveChanges();

Cela va et met à jour la table d'association plusieurs à plusieurs avec un mappage correct. Mais lorsque j'essaie de supprimer un élément du tableau, je n'obtiens aucune erreur, mais il ne le supprime pas du tableau?

foreach (var artistType in this._db.ArtistTypes
    .Where(at => vm.SelectedIds.Contains(at.ArtistTypeID)))
{
    artistDetail.ArtistTypes.Remove(artistType);
}

this._db.Entry(artistDetail).State = EntityState.Modified;
this._db.SaveChanges();

Qu'est-ce que je rate?

22
akd

La méthode standard consiste à charger l'artiste y compris les types connexes actuels de la base de données, puis à supprimer les types avec les ID sélectionnés de la collection de types chargée. Le suivi des modifications reconnaît les types qui ont été supprimés et écrit les instructions DELETE correctes dans la table de jointure:

var artist = this._db.Artists.Include(a => a.ArtistTypes)
    .SingleOrDefault(a => a.ArtistID == someArtistID);

if (artist != null)
{
    foreach (var artistType in artist.ArtistTypes
        .Where(at => vm.SelectedIds.Contains(at.ArtistTypeID)).ToList())
    {
        artist.ArtistTypes.Remove(artistType);
    }
    this._db.SaveChanges();        
}
45
Slauma