Удаление многих из многих сущностей Framework

Между Artist и ArtistType существует много-много отношений. Я могу легко добавить исполнителя ArtistType, как показано ниже

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

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

Это происходит и обновляет таблицу множеств для многих с правильным сопоставлением. Но когда я пытаюсь удалить любой элемент из таблицы, я не получаю никаких ошибок, но он не удаляет его из таблицы?

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

Что мне не хватает?

Ответ 1

Стандартный способ - загрузить исполнителя, включая текущие связанные типы из базы данных, а затем удалить типы с выбранными идентификаторами из коллекции загруженных типов. Отслеживание изменений будет распознавать, какие типы были удалены, и записать правильные инструкции DELETE в таблицу соединений:

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