2014-02-11 96 views
0

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

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

任何人都知道为什么会发生这种情况?

回答

0

在为实体框架创建模型时使用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需要流利的API。

另请参阅Deleting orphans with Entity Framework作为参考。