我有以下课程
public class ObjectA{
private List<ObjectB> list;
}
ObjectA
和ObjectB
处于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; }
}
我做错了什么?
感谢。
答案 0 :(得分:1)
如果与非可空FK有一对多关系,则还必须删除ObjectB,因为从导航属性中删除它只会删除关系(使FK为null),但不会删除ObjectB本身。试试这个:
while (objectA.list.Any()) {
var b = b;
objectA.list.Remove(b);
entities.DeleteObject(b);
}