【问题标题】:How do I cascade deletes into a link table using the EF4 fluent API?如何使用 EF4 fluent API 将删除级联到链接表中?
【发布时间】:2011-05-08 15:59:06
【问题描述】:

我在现有 (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 方法。

我在这里错过了什么?

【问题讨论】:

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


    【解决方案1】:

    从 EF CTP4 开始,无法直接通过 Fluent API 在多对多关联上打开级联删除。

    也就是说,如果您的意图是确保您可以删除原则(例如 Plan 记录)而不必担心链接表中的依赖记录(即 PlanTipLinks ) 那么您不需要在数据库上打开级联,因为 EF Code First 将在客户端处理多对多关联时的级联删除。

    例如,当您删除 Plan 对象时,code first 足够聪明,可以首先发送删除语句以删除 PlanTipLinks 表中的依赖记录,然后之后它将发送另一个删除语句来删除计划记录。

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

    【讨论】:

    • @dommer,这个答案对您有什么帮助,因为您写道“问题是,当我删除计划时,PlanTipLinks 表上出现外键异常。”?这个答案表明不会发生异常。
    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多