实体框架 - 删除N:N关系

时间:2013-01-17 08:49:49

标签: entity-framework entity-framework-4

我有以下课程

public class ObjectA{
   private List<ObjectB> list;    
}

ObjectAObjectB处于N:N关系。

我想只删除关系,我使用

 while (objectA.list.Any())
        objectA.list.Remove(objectA.list.First());
  • 列表是关系表 -

    List<ObjectAobjectB>
    

我得到了

  

操作失败:因为一个或多个关系无法更改   外键属性是不可为空的。当改变关系时,   相关的外键属性设置为空值。如果外键没有   支持空值,必须定义新的关系,外键属性   必须分配另一个非空值,或者必须删除不相关的对象。

编辑:更新模型定义
我的模型中有三个表:
 * ClassA - SchemaA,
 * ClassAClassB - SchemaA,
 * ClassB - SchemaB,

在我的上下文(和edmx)中,我只有Schema A(ClassA和ClassAClassB)
因为关系表是1:N。

以下是从edmx生成的代码。

public partial class ClassA:DomainEntity
{
    ....
    public virtual ICollection<ClassB>  ClassAClassB { get; set; }
}

我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:1)

如果与非可空FK有一对多关系,则还必须删除ObjectB,因为从导航属性中删除它只会删除关系(使FK为null),但不会删除ObjectB本身。试试这个:

 while (objectA.list.Any()) {
     var b = b;
     objectA.list.Remove(b);
     entities.DeleteObject(b);    
 }