如何通过分配新集合来更新多对多集合?

在实体框架核心 2.0 中,我在Post和之间有很多关系Category(绑定类是PostCategory)。


当用户更新 a 时Post,整个Post对象(及其PostCategory集合)被发送到服务器,在这里我想重新分配新收到的集合PostCategory(用户可以通过添加新类别和删除一些类别来显着更改此集合)。


我用来更新该集合的简化代码(我只是分配了全新的集合):


var post = await dbContext.Posts

    .Include(p => p.PostCategories)

    .ThenInclude(pc => pc.Category)

    .SingleOrDefaultAsync(someId);


post.PostCategories = ... Some new collection...; // <<<

dbContext.Posts.Update(post);

await dbContext.SaveChangesAsync();

这个新集合的对象与先前集合中的对象 ID 相同(例如,用户删除了一些(但不是全部)类别)。由于,我得到一个例外:


System.InvalidOperationException:无法跟踪实体类型“PostCategory”的实例,因为已跟踪具有相同 {'CategoryId', 'PostId'} 键值的另一个实例。


如何有效地重建新集合(或简单地分配一个新集合)而不会出现此异常?


翻阅古今
浏览 130回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP