代码之家  ›  专栏  ›  技术社区  ›  dommer

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

  •  3
  • dommer  · 技术社区  · 14 年前

    在现有的(MSSQL 2008 R2)数据库中有两个表,它们由链接表关联。

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

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

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

    我正在使用以下流畅的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 回复  |  直到 9 年前
        1
  •  1
  •   Community CDub    8 年前

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

    也就是说,如果你的意图是确保你可以删除原则(例如 计划 无需担心链接表中的依赖记录(即。 植物链接 )然后不需要在数据库上启用级联,因为当涉及到多对多关联时,EF代码首先将处理客户端上的级联删除。

    例如,当您删除 计划 对象,代码优先足够聪明,可以首先发送delete语句以删除 植物链接 表,然后它将发送另一条delete语句来删除计划记录。

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