我有以下课程
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'
它只是在关系中输入null而不是删除对象 我做错了什么?
感谢。
答案 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上似乎有很多相关的问题。