如何使用EF4流畅API将级联删除应用于链接表?

3

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

这两个表分别是“计划”和“提示”。链接表是“PlanTipLinks”。

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

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

我正在使用以下流畅的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个回答

1
自EF CTP4起,无法通过Fluent API直接打开许多对许多关联上的级联删除。
也就是说,如果您的意图是确保您可以删除原则(例如Plan记录)而不必担心链接表中的相关记录(即PlanTipLinks),那么您无需在数据库上打开级联式操作,因为EF Code First会在客户端处理许多到许多关联时的级联删除。
例如,当您删除计划对象时,code first足够智能,先发送一个删除语句以清除PlanTipLinks表中的相关记录,之后再发送另一个删除语句以删除计划记录。
有关更多信息,请查看以下帖子:
EF CTP4 cascade delete on many to many relationship

1
@dommer,这个答案对你有帮助吗?因为你写道:“问题是,当我删除一个计划时,PlanTipLinks表会出现外键异常。”?这个答案表明不会发生异常。 - R. Schreurs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接