从多对多表中删除关系数据后,Cascade Delete失败

时间:2014-02-11 19:50:58

标签: c# entity-framework-5

我手动删除多对多实体的关系数据,并保存所有更改。我可以离开我的页面,然后回来做一个级联删除没有问题,但如果我删除关系数据后立即执行级联删除,我得到错误:

System.InvalidOperationException:操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

任何人都知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

在为Entity Framework创建模型时使用WillCascadeOnDelete。例如:

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Proposal>()
           .HasMany(Proposal=> proposal.Responses)
           .WithRequired(response => response.Proposal)
           .HasForeignKey(response => response.ProposalId)
           .WillCascadeOnDelete(true);
    }
}

现在您可以使用OBject.Remove(datatoremove);进行删除操作。 CascadeonDelete需要Fluent API。

另请参阅Deleting orphans with Entity Framework以供参考。