C# 在EF上的级联多对多关系上删除
这些是我的桌子: 是否有一种标准的方法来应用它们之间的级联删除C# 在EF上的级联多对多关系上删除,c#,entity-framework,ef-code-first,many-to-many,code-first,C#,Entity Framework,Ef Code First,Many To Many,Code First,这些是我的桌子: 是否有一种标准的方法来应用它们之间的级联删除 在一对多关系中,我没有问题,但在这种情况下,我必须使用我编写的方法手动删除。如图片所示,您只有两个表。不可能将它们之间的关系设置为多对多(只有当出现新的对时才会向该表添加新列,但这是非常糟糕的做法)。您应该创建第三个表,其中将包含它们的主键对。在迁移时,您将能够在每个主表和第三个表之间将cascadeDelete指定为true。见下文: 型号: public class BugReport { public BugRepo
在一对多关系中,我没有问题,但在这种情况下,我必须使用我编写的方法手动删除。如图片所示,您只有两个表。不可能将它们之间的关系设置为多对多(只有当出现新的对时才会向该表添加新列,但这是非常糟糕的做法)。您应该创建第三个表,其中将包含它们的主键对。在迁移时,您将能够在每个主表和第三个表之间将cascadeDelete指定为true。见下文: 型号:
public class BugReport
{
public BugReport()
{
dublicates = new HashSet<DublicateBugReport>();
}
public int ID { get; set; }
public virtual ICollection<DublicateBugReport> dublicates { get; set; }
}
public class DublicateBugReport
{
public DublicateBugReport()
{
reports = new HashSet<BugReport>();
}
public int ID { get; set; }
public virtual ICollection<BugReport> reports { get; set; }
}
public override void Up()
{
CreateTable(
"BugReports",
c => new
{
ID = c.Int(nullable: false, identity: true),
})
.PrimaryKey(t => t.ID) ;
CreateTable(
"DublicateBugReports",
c => new
{
ID = c.Int(nullable: false, identity: true),
})
.PrimaryKey(t => t.ID) ;
CreateTable(
"DublicateBugReportBugReports",
c => new
{
DublicateBugReport_ID = c.Int(nullable: false),
BugReport_ID = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.DublicateBugReport_ID, t.BugReport_ID })
//pay attention! - cascadeDelete: true
.ForeignKey("DublicateBugReports", t => t.DublicateBugReport_ID, cascadeDelete: true)
.ForeignKey("BugReports", t => t.BugReport_ID, cascadeDelete: true)
.Index(t => t.DublicateBugReport_ID)
.Index(t => t.BugReport_ID);
}
如图所示,您只有两张桌子。不可能将它们之间的关系设置为多对多(只有当出现新的对时才会向该表添加新列,但这是非常糟糕的做法)。您应该创建第三个表,其中将包含它们的主键对。在迁移时,您将能够在每个主表和第三个表之间将cascadeDelete指定为true。见下文: 型号:
public class BugReport
{
public BugReport()
{
dublicates = new HashSet<DublicateBugReport>();
}
public int ID { get; set; }
public virtual ICollection<DublicateBugReport> dublicates { get; set; }
}
public class DublicateBugReport
{
public DublicateBugReport()
{
reports = new HashSet<BugReport>();
}
public int ID { get; set; }
public virtual ICollection<BugReport> reports { get; set; }
}
public override void Up()
{
CreateTable(
"BugReports",
c => new
{
ID = c.Int(nullable: false, identity: true),
})
.PrimaryKey(t => t.ID) ;
CreateTable(
"DublicateBugReports",
c => new
{
ID = c.Int(nullable: false, identity: true),
})
.PrimaryKey(t => t.ID) ;
CreateTable(
"DublicateBugReportBugReports",
c => new
{
DublicateBugReport_ID = c.Int(nullable: false),
BugReport_ID = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.DublicateBugReport_ID, t.BugReport_ID })
//pay attention! - cascadeDelete: true
.ForeignKey("DublicateBugReports", t => t.DublicateBugReport_ID, cascadeDelete: true)
.ForeignKey("BugReports", t => t.BugReport_ID, cascadeDelete: true)
.Index(t => t.DublicateBugReport_ID)
.Index(t => t.BugReport_ID);
}
通常,默认情况下,EF中会启用级联删除。显示映射的代码通常,默认情况下,EF中会启用级联删除。显示映射的代码