2010-12-11 18 views
1

我想告訴用戶的確切原因的記錄無法刪除,我有這樣的代碼來執行刪除操作:如何讓LINQ到SQL中刪除異常信息對用戶更友好

try{ 
    var table = Context.GetTable<TRecordType>(); 
    lock (table) { 
        table.DeleteOnSubmit(recordToDelete); 
        Context.SubmitChanges(); 
       }     
    catch (Exception ex) { 
       //Put back record     
       throw new Exception("Could not perform dataservice delete operation", ex); 
      } 

正如你可以看到非常簡單,但通常由於外鍵約束而無法刪除該記錄,所以我得到此SQLException並顯示如下消息:「DELETE語句與REFERENCE約束」FK_Something「衝突...數據庫中發生衝突「X」,表「dbo.Department」,'DepartmentId'列,現在我真正想做的事情是告訴用戶他不能刪除記錄,因爲被異常提到的這個表引用了。不得不面對se文本要做到這一點,這是唯一的方法嗎?如果我可以獲得對違反約束條件的記錄的引用,那麼它會非常好,因此我可以告訴用戶「您不能刪除文檔A,正如文檔B,C和D所引用的那樣」。

回答

1

首先捕獲SQLException具體,因爲這是你正在處理。

其次,檢查以確保異常是您所期望的。您還需要處理其他SQLException s,或重新扔掉它們。

您將不得不解析文本(排序 - 只使用RegEx),因爲這是從SQL Server返回的消息。它引用表名和數據庫約束,而不是對象或應用程序知道的其他任何東西。

當然,在recordToDelete變量中,您確實有一個無法刪除的記錄的引用。

您也有LINQ-to-SQL模型,因此您可以遍歷與該記錄的關係以識別引用它的文檔。