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?
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();
}