删除1:N关系中的相关元素,不仅在外键中插入null

时间:2013-01-17 14:49:53

标签: entity-framework entity-framework-4

我有以下课程

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

ObjectAObjectB属于1:N关系。

我想删除一些ObjectB实例,我使用:

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

    List<ObjectAobjectB>
    

在数据库中,我已经将相关定义为可以为空的外键,否则我得到了

  

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

所以现在它是Nullable外键,
当我运行SQL分析时,我得到以下内容:

exec sp_executesql N'update [Schem].[ClassB]
set [ClassAID] = null
where ([Id] = @0)
',N'@0 uniqueidentifier',@0='092CE959-370A-4785-AF4A-93A0E4952C59'

它只是在关系中输入null而不是删除对象 我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:4)

objectA.list.Remove(objectA.list.First());正在删除关系,而不是实际实体。如果要从数据库中删除objectB,则必须将其从上下文中删除,如下所示:

foreach(var item in objectA.list.ToList())
    context.ObjectBs.Remove(item);

答案 1 :(得分:-1)

我认为这是Cascade Delete的情况。

我不确定,但我认为您可以设置级联删除(在您的应用程序和数据库中)以允许EF在级联上删除。

也许看一些文档来找到如何做到这一点。在SO上似乎有很多相关的问题。