3

我有一个现有的(MSSQL 2008 R2)数据库中有一个链接表相关的两个表。如何使用EF4流利API级联删除链接表?

这两张表是“计划”和“提示”。链接表是“PlanTipLinks”。

计划可以有很多提示,并且提示可以与多个计划相关联(即它是多对多的关系)。在应用程序中,我只关心“Plan.Tips”关系。我不需要Tip.Plans的反向关系。

链接表中的外键引用不能为空。

我用下面的流畅API代码映射这种关系:

modelBuilder.Entity<Plan>() 
    .HasMany(p => p.Tips) 
    .WithMany() 
    .Map("PlanTipLinks", (p, t) => 
     new 
     { 
      PlanId = p.Id, 
      TipId = t.Id 
     }); 

这在表中创建正确的条目。问题是,当我删除一个计划时,我在PlanTipLinks表上得到一个外键异常。

大概我需要告诉它当一个计划被删除时级联到PlanTipLinks表中,但我不知道该怎么做。我似乎无法使用HasMany/WithMany方法调用WillCascadeOnDelete方法。

我在这里错过了什么?

回答

1

自EF CTP4起,无法直接通过Fluent API启用多对多关联上的级联删除。

也就是说,如果你的目的是不必担心的链接表中的相关记录,以确保您可以删除原则(如计划记录)(即PlanTipLinks),那么你不”需要打开数据库中的级联,因为EF Code First会处理多对多关联中的客户端级联删除。

例如,当你删除一个计划对象,代码首先是足够聪明,首先发送一个delete语句在PlanTipLinks摆脱依赖记录表之后,它会发送另一个DELETE语句删除计划记录。

欲了解更多信息,请看看以下职位:
EF CTP4 cascade delete on many to many relationship

+1

@dommer,这究竟是怎么回答帮助你,因为你写了“问题是,当我删除一个计划,我得到PlanTipLinks表上的外键异常。“?这个答案表明不会发生异常。 – 2014-09-23 09:45:57