2014-02-11 137 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作爲參考。