2011-09-08 32 views
1

我在the lightswitch forum上發佈了此問題,但什麼也沒得到。在放棄Lightswitch之前,我想再試一次。是否有任何其他選項可用於在Lightswitch中調試此刪除問題

我正在執行刪除針對具有良好定義的關係約束的Sql Server數據庫。由於各種原因,我無法在這些關係上指定級聯刪除。

我的方法似乎正確,因爲我正在成功刪除一個實體類型。在實體刪除事件,我刪除所有相關兒童是這樣的:

entity.simpleChild.Delete(); 

foreach (var child in entity.complexChild) 
{ 
    ((IEntityObject)child).Delete(); 
} 

foreach (var child in entity.ChildWithGrandChildren) 
{ 
    foreach (var grandChild in child.Children) 
    { 
     ((IEntityObject)grandChild).Delete(); 
    } 
    child.Delete(); 
} 

我的一個實體類型的失敗,但是。這個實體有孫子,但我也刪除了這些。不僅如此,當我評論刪除孫子並試圖刪除一個沒有相關孫子的實體時,我會得到同樣的錯誤。我正在以與TSQL腳本相同的順序刪除所有內容。但是在運行時,出現此錯誤:

操作失敗:由於一個或多個外鍵屬性不可空,因此無法更改關係。當對關係進行更改時,相關的外鍵屬性將設置爲空值。如果外鍵不支持空值,則必須定義新的關係,必須爲外鍵屬性指定另一個非空值,或者必須刪除不相關的對象。

當我分析的數據庫,我可以刪除看到很多選擇,但沒有嘗試,所以只的LightSwitch認爲將是一個問題。我能做些什麼來嘗試找出問題所在?從模型中刪除各種相關的實體從不會產生任何不同的消息。

+0

您能否發佈觸發此錯誤的代碼?請務必指出您正在操作的環境 - 響應命令,數據事件等內容。 –

+0

添加了簡單代碼示例。正如我所提到的,這段代碼在實體的Deleting事件中運行。 – dudeNumber4

+0

如果我們通過中間子實體將「孫子女」定義爲與「祖父母」相關的實體,那麼您發佈的代碼並不刪除孫子女。 –

回答

0

以下是一些能夠成功刪除3部分關係的示例代碼:人員 - 兒童 - VS LightSwitch應用程序中的Grandchild。 SQL服務器表定義使用DELETE NO ACTION,就像您的示例一樣。

partial void People_Deleting(Person entity) 
    { 
     foreach (var child in entity.Children) 
     { 
      foreach (var grandchild in child.GrandChildQuery) 
      { 
       ((IEntityObject)grandchild).Delete(); 
      } 

      child.Delete(); 
     } 
    } 

令我感到震驚的是,這段代碼與您發佈的示例代碼有不同的結構。特別是,這段代碼有一個內部循環,用於從中間子實體中刪除孫子。由於你沒有內部循環,你必須有一個不同的策略來刪除你的樣本中沒有顯示的孫子,否則就是這個問題。

+0

當,我將我的孫子選擇從child.GrandChildren更改爲child.GrandChildQuery,但沒有奏效。顯然,孫子集合和查詢是同義詞。 – dudeNumber4

0

我有同樣的問題,並譴責另一名開發人員放置代碼刪除和刪除兒童的事件和此代碼導致的錯誤。

希望這可以幫助他人面對同樣的問題。

相關問題