3

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

我在这里想念什么?

4

1 回答 1

1

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

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

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

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

于 2010-11-27T17:45:35.690 回答