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();
我想念什么?
最佳答案
标准方法是从数据库中加载包括当前相关类型的艺术家,然后从加载的类型集合中删除具有选定ID的类型。更改跟踪将识别出已删除的类型,并将正确的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();
}