EF Core 5,删除多对多关系

Posted

技术标签:

【中文标题】EF Core 5,删除多对多关系【英文标题】:EF Core 5, delete a relation many-to-many 【发布时间】:2021-03-30 12:28:44 【问题描述】:

我有一个由 EF Core 5 提供支持的 api,并且我正在处理多对多关系(ArtistsReleases表)。

即使这样,post 操作也能正常工作,以艺术家为例,我决定不添加发送现有版本的 Guid 的可能性,而只添加将同时创建的完整版本对象。

那么我如何将艺术家链接到已经存在的版本?我正在尝试在 put 操作中这样做,方法是在 artistD 内部发送一个 releaseDto 列表,仅列出竞争的 Guid。

这可以很好地添加新关系,ArtistRelease 联结表确实已更新但 我未指定的 Guid 未被删除,我无法删除关系,除非我要删除艺术家或发布。

所以我的问题是如何删除关系?

你能帮帮我吗?

var releases = Repository.Release.GetReleases(artistForUpdateDto.Releases, trackChanges: false);

if(releases.Count() != artistForUpdateDto.Releases.Count())

    Logger.LogInfo($"Some release ids are not valid in the ArtistForUpdateDto object");
    return NotFound();


Mapper.Map(artistForUpdateDto, artist);
artist.Releases = releases.ToList();

Repository.Save();

【问题讨论】:

【参考方案1】:

我找到了一个解决方案,我只需要使用“包含”来获取艺术家以获取其发布

RepositoryContext.Set<T>().Where(expression).Include(includeExpression)

如果我用空列表保存艺术家,连接表将被更新:)

【讨论】:

以上是关于EF Core 5,删除多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 过滤掉多对多关系中的重复实体

EF Core 5.0 中的多对多关系是不是可以配置为仅保留一个导航属性(在一侧)?

EF Core 5.0 - 更新 ASP.NET Core Web API 中的多对多实体

EF Core 多对多关系

EF Core 多对多关系上的 LINQ 查询

如何在 EF Core 中查询多对多关系