2013-03-01 74 views
2

我有一個父>子關係中的兩個表。實體框架5級聯刪除不起作用盡管正確的配置

在試圖刪除父,我收到以下錯誤:

The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted. 

我使用SQL Server 2012在dbfirst類型的模型。

在數據庫中,刪除規則設置爲級聯,並且我仔細檢查了.edmx中的規則也設置爲級聯。

我正在使用多個事務,然後在最後調用.SaveChanges()...不知道這是否與它有任何關係。具體來說,我在另一張表上首先發布更新,然後是此刪除。

這裏是刪除我的公共倉庫代碼:

public virtual ActionConfirmation<int> Delete(TRepository entity, bool boolCommitChgs = true) 
     { 

      try 
      { 
       //DbSet.Remove(entity); 
       _dataContext.Entry(entity).State = System.Data.EntityState.Deleted; 
       if (boolCommitChgs) 
       { 
        _dataContext.SaveChanges(); 
       } 

       return CRUDMessage(true, "deleted", entity); 
      } 
      catch (Exception ex) 
      { 
       return CRUDMessage(false, "delete", entity, ex); 
      } 
     } 

然後我完成交易,在這裏呼籲的SaveChanges,這是當被拋出的錯誤:

try 
     { 
      dbContext.SaveChanges(); 
      result = ActionConfirmation<int>.CreateSuccessConfirmation(
          string.Format("{0} {1}: {2} successful.", 
          strNoun, 
          id, 
          strVerb 
         ), 
          id 
         ); 
     } 
     catch (Exception ex) 
     { 
      ....etc.... 

任何想法,爲什麼我會得到這個錯誤?

enter image description here enter image description here

+0

啊...有點接近於縮小它... ID確實與同一事務中的多個更新的分組有關。如果我只是發出父項的刪除並直接調用SaveChanges,它會起作用......因此,出於某種原因,您不能在另一個表上執行更新,然後在這個不相關的表上執行刪除操作? – 2013-03-01 05:09:31

+0

該問題可能是由更新引起的,這些更改會改變一些關係。 – 2013-03-01 08:34:32

+0

感謝拉迪斯拉夫的建議......但我不認爲這是事實。如果我試圖修改2個沒有關係的表,但是使用相同的上下文,它會給我那個錯誤。如果我爲每個表格修改使用上下文的新實例,它將起作用。所以也許我不明白DbContext,但我認爲你可以更新表X,然後在同一個DbContext實例中刪除表Y而沒有問題。再次,表x和表y之間絕對沒有關係....困惑:( – 2013-03-01 19:17:14

回答

0

的問題可以通過您的更新改變一些關係引起的。