1

我有以下课程

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

ObjectA并且ObjectB是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'

它只是在关系中输入一个空值,而不是删除对象。
我究竟做错了什么?

谢谢。

4

2 回答 2

4

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

foreach(var item in objectA.list.ToList())
    context.ObjectBs.Remove(item);
于 2013-01-19T01:10:00.060 回答
-1

我认为这是Cascade Delete的情况。

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

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

于 2013-01-17T15:33:04.743 回答