级联删除linq EF4.0

时间:2017-01-12 00:25:22

标签: c# cascading

我有一个像这样的SQL Server数据库:master table,details table,subdetails table。我使用Linq和EF 4.0。

因此,master可以有更多细节,每个细节都可以有更多细节。

我有一个MASTER ID,我想要删除此记录。

如何在un colpo solo(EF4.0)中删除包含详细信息和子细节的主记录?

1 个答案:

答案 0 :(得分:2)

EF默认为所有实体启用级联删除效果。

以下内容已从here复制。

考虑以下具有一对多关系的学生和标准实体。

public class Student
{
    public Student() { }

    public int StudentId { get; set; }
    public string StudentName { get; set; }

    public virtual Standard Standard { get; set; }
}

public class Standard
{
    public Standard()
    {
        Students = new List<Student>();
    }
    public int StandardId { get; set; }
    public string Description { get; set; }

    public virtual ICollection<Student> Students { get; set; }
}

以下示例演示了具有一对多关系的实体之间的级联删除效果。

using( var ctx = new SchoolContext() ) {

   var student1 = new Student() { StudentName = "James" };
   var student2 = new Student() { StudentName = "Gandhi" };

   var standard1 = new Standard() { StandardName = "Standard 1" };

   student1.Standard = standard1;
   student2.Standard = standard1;

   ctx.Students.Add( student1 );
   ctx.Students.Add( student2 );

   //inserts students and standard1 into db
   ctx.SaveChanges();

   //deletes standard1 from db and also set standard_StandardId FK column in Students table to null for
   // all the students that reference standard1.
   ctx.Standards.Remove( standard1 );

   ctx.SaveChanges();
}

在上面的示例中,它从db中删除standard1,并将Students表中的standard_StandardId FK列设置为null,以引用standard1的所有记录。

如果删除了一个或其他实体,EF会自动删除多对多关系实体的中间表中的相关记录。

因此,EF默认为所有实体启用级联删除效果。