2016-08-20 32 views
5

我正在使用EF 6在我的項目中,當我想從表中刪除一行時,它會拋出異常,因爲該行在另一個表中被引用。我想知道哪些表阻止我用c#代碼和EF刪除。如何知道哪個表阻止我用Entity Framework 6刪除一行?

enter image description here

我們在表A中的記錄和行表C中的引用不表B中是否有可能與EF知道將表C防止我刪除該行?

我還使用SQL-Server 2012的

+3

三個想法:解析例外;先閱讀實體並檢查子實體;切換級聯刪除 –

+0

如果在服務器中創建了關係,數據庫服務器(而非EF)將阻止刪除父表。運行該腳本以瞭解關係:http://stackoverflow.com/a/8095137/3142139。 –

回答

0

如果你試圖動態排序,這在運行時顯示用戶或刪除嘗試之前確定並不能確定可能發生的衝突,你可以使用sys表和一些動態的SQL來排序。

  1. 使用sys.objects找到您的表名並獲取object_id。
  2. 使用sys.foreign_keys查找引用您的表的表。
  3. 使用sys。 foreign_key_columns以獲取引用的確切列號。
  4. 使用sys.columns可以獲得適當的列名稱。
  5. 構建動態SQL以搜索表名和列名,並使用無法刪除的源行中的值查找違規行。
  6. 列出返回在sys.objects中查找的表格。可選列出行數。
  7. 可以選擇使用動態SQL來構建其他語句(如刪除違規記錄 - 這可能需要遞歸 - 照顧這個 - 你可能會失去大量的數據!)
相關問題