如何使Linq to Sql Delete Exception消息更加用户友好

时间:2010-12-11 02:27:34

标签: linq-to-sql foreign-keys constraints sql-delete

我想告诉用户无法删除记录的确切原因,我有此代码执行删除:

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。现在我真正想做的是至少通知用户他不能删除记录,因为该表引用了这个例外我讨厌不得不解析文本来做到这一点,这是唯一的方法吗?如果我能获得对破坏约束的记录的引用,那将是非常好的,所以我可以告诉用户“你不能删除文档A,如文件B,C和D所引用的那样。

1 个答案:

答案 0 :(得分:1)

首先专门捕捉SQLException,因为这就是你正在处理的事情。

其次,检查以确保异常是您所期望的异常。你还需要处理其他SQLException,或者重新抛出它们。

您将不得不解析文本(排序 - 只使用RegEx),因为这是从SQL Server返回的消息。它引用表名和数据库约束,而不是对象或应用程序知道的任何其他内容。

当然,您确实在recordToDelete变量中引用了无法删除的记录。

您还拥有LINQ-to-SQL模型,因此您可以遍历与该记录的关系,以便识别引用它的文档。