实体框架使用存根删除多对多关系
本文关键字:关系 删除 存根 框架 实体 | 更新日期: 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
.