实体框架使用存根删除多对多关系

本文关键字:关系 删除 存根 框架 实体 | 更新日期: 2023-09-27 18:14:56

我试图删除两个实体之间的多-多关系条目,而不首先查询它们中的任何一个。类似以下语句:

Foo foo = new Foo() {Id = 1};
context.Foos.Attach(foo);
context.Entry(foo).State = EntityState.Modified;
Bar bar = new Bar { Id = 2 };
context.Bars.Attach(bar);
context.Entry(bar).State = EntityState.Modified;
// This doesn't work: no exceptions but the relationship doesn't get deleted
foo.Bars = new List<Bar> { bar };
foo.Bars.Remove(bar);
context.SaveChanges();

如何从foo中删除bar。在不首先查询任何实体的情况下禁止关系?

实体框架使用存根删除多对多关系

您需要让存根实体为Unchanged,并且在关系中也处于Unchanged状态(在foo.Bars = new List<Bar> { bar };之后调用AcceptAllChanges)。只有这样,foo.Bars.Remove(bar);才会将关系置于Deleted状态,SaveChanges才会将其删除。您可以通过检查底层的ObjectContext.ObjectStateManager来验证发生了什么—它有实体和关系的字典。如果您不使用代理,您可能需要DetectChanges .