删除多个到多个entity framework

ArtistArtistType之间存在多对多的关系。 我可以轻松添加艺术家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(); 

我错过了什么?

标准方法是从数据库加载包括当前相关类型的艺术家,然后从加载的类型集合中删除具有所选Ids的类型。 更改跟踪将识别已删除的类型,并将正确的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(); }