如何使用EF4 fluent API将删除级联到链接表中?

时间:2010-11-11 18:43:48

标签: entity-framework foreign-keys cascade fluent-interface cascading-deletes

我在现有(MSSQL 2008 R2)数据库中有两个表,它们通过链接表相关联。

这两个表是“计划”和“提示”。链接表是“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 个答案:

答案 0 :(得分:1)

从EF CTP4开始,无法通过Fluent API 直接启用多对多关联的级联删除。

那就是说,如果您的目的是确保您可以删除原则(例如计划记录),而不必担心链接表中的依赖记录(即 PlanTipLinks )那么你不需要打开数据库上的级联,因为当涉及到多对多关联时,EF Code First将负责客户端的级联删除。

例如,当您删除计划对象时,代码首先足够智能,首先发送删除语句以摆脱 PlanTipLinks 表中的依赖记录,之后,它将发送另一个删除语句来删除计划记录。

有关详细信息,请查看以下帖子:
EF CTP4 cascade delete on many to many relationship