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

时间:2014-07-26 22:58:39

标签: c#

我试图删除两个实体之间的多个关系条目,而不首先查询它们中的任何一个。有点像:

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?

1 个答案:

答案 0 :(得分:0)

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