Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用EF4执行级联删除?_C#_Linq_Entity Framework_Entity Framework 4 - Fatal编程技术网

C# 如何使用EF4执行级联删除?

C# 如何使用EF4执行级联删除?,c#,linq,entity-framework,entity-framework-4,C#,Linq,Entity Framework,Entity Framework 4,在上一个项目中,我们让EF4执行级联删除(删除父记录,子记录也被删除)。在这个项目(不同的公司)上,EF4没有执行级联删除。我需要做什么才能让EF4执行级联删除?仅使用EF4的级联删除是不够的;您还应该在数据库上设置级联删除,以防并非所有子对象都加载到对象上下文中。也就是说,级联删除属性是在关联上设置的。转到模型浏览器,选择一个关联并查看属性。我在同一条船上。我在EDM/EF4中只有cascade on delete,在数据库中还没有。试试这个 在关系中,将父端的OnDelete(1重数)设置为

在上一个项目中,我们让EF4执行级联删除(删除父记录,子记录也被删除)。在这个项目(不同的公司)上,EF4没有执行级联删除。我需要做什么才能让EF4执行级联删除?

仅使用EF4的级联删除是不够的;您还应该在数据库上设置级联删除,以防并非所有子对象都加载到对象上下文中。也就是说,级联删除属性是在关联上设置的。转到模型浏览器,选择一个关联并查看属性。

我在同一条船上。我在EDM/EF4中只有cascade on delete,在数据库中还没有。试试这个

在关系中,将父端的OnDelete(1重数)设置为Cascade。然后在代码中加载所有子项,然后再保存更改(删除)


您有两种级联删除实现的方法:

  • 在数据库层上设置它(触发器或关系)
  • 尝试使用扩展方法。您可以为当前表定义删除逻辑,并调用相关表更新的方法

  • 也许我不完全理解这个问题,但级联删除不是由数据库执行的吗?这将如何成为EF问题?根据架构师的说法,我们现在和将来都不会在数据库上设置级联删除。我将查看关联属性。谢谢@这是你的派对:)你可以在任何方向设置;检查OnDelete属性。MorganPDX关于不在一个地方执行此操作是正确的。如果您在EDM中设置它,您必须非常小心地注意可能并非所有相关数据都加载到内存中的情况。如果数据库中有更多的“子项”,并且您没有级联,那么当db尝试删除“父项”时,您将得到一个异常。只是说……这也是EF团队的推荐。
    var parent = context.Parents.SingleOrDefault(p => p.Id == parentId);
    parent.Children.Load();
    if (parent != null)
            {
                context.Parent.DeleteObject(parent);
                context.SaveChanges();
            }