Entity framework core EF核心5:轨迹图更新多对多关系

Entity framework core EF核心5:轨迹图更新多对多关系,entity-framework-core,ef-core-5.0,Entity Framework Core,Ef Core 5.0,是否可以从分离的对象更新EF Core 5.0多对多集合 假设我们有Blog和Tag模型,具有多对多关系 我正试图用以下代码保存一个分离的博客: intupdateblog(博客) { db.ChangeTracker.TrackGraph(博客,节点=> { if(node.Entry.Entity==blog) node.Entry.State=node.Entry.IsKeySet?EntityState.Modified:EntityState.Added; 其他的 { //我不想保存附

是否可以从分离的对象更新EF Core 5.0多对多集合

假设我们有
Blog
Tag
模型,具有多对多关系

我正试图用以下代码保存一个分离的博客:

intupdateblog(博客)
{
db.ChangeTracker.TrackGraph(博客,节点=>
{
if(node.Entry.Entity==blog)
node.Entry.State=node.Entry.IsKeySet?EntityState.Modified:EntityState.Added;
其他的
{
//我不想保存附加到博客的标签,只需更新EF skip导航。
node.Entry.State=node.Entry.Unchanged;
}
});
db.SaveChanges();
返回blog.Id;
}
这主要起作用:
Blog
被插入或更新。插入新博客时,
标签
集合也会正确插入。 但是在更新现有博客时,我找不到更新
标签
集合的方法

我检查了
entry.Navigation(“Tags”).IsModified
是否正确(根据文档,这意味着它将被保存)
IsLoaded
false
,但将其更改为
true
也没有什么区别


如果EF没有当前的收集状态,我希望它执行一个完整的
DELETE
,然后
INSERT
当前值。如果不正确加载集合,这是不可能实现的吗?这将严重限制轨迹图的实用性

经过更多的调试和阅读EF核心源代码后,我认为答案是:“不,如果不先正确加载,就不可能更新多对多集合(或任何集合)

似乎与NHibernate不同,EF无法更新未首先加载的集合,以便进行区分(NHibernate通过删除并重新创建所有内容来处理这种情况)

这反过来又使更新这样一个分离的图变得相当痛苦。如果有人知道一种简单、高效、通用的方法,我会很乐意接受答案