我试图删除两个实体之间的多个关系条目,而不首先查询它们中的任何一个。有点像:
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.Bars关系中删除bar?
答案 0 :(得分:0)
您需要将存根实体设为Unchanged
且关系也处于Unchanged
状态(AcceptAllChanges
后调用foo.Bars = new List<Bar> { bar };
)。只有这样foo.Bars.Remove(bar);
才能将关系置于Deleted
状态,SaveChanges
将删除它。您可以通过检查基础ObjectContext.ObjectStateManager
来验证发生了什么 - 它的状态包含实体和关系的字典。如果您未使用代理,则可能需要DetectChanges
。