2010-12-11 16 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模型,因此您可以遍历与该记录的关系以识别引用它的文档。