Linq to sql 如何使Linq to Sql删除异常消息更加用户友好

Linq to sql 如何使Linq to Sql删除异常消息更加用户友好,linq-to-sql,foreign-keys,constraints,sql-delete,Linq To Sql,Foreign Keys,Constraints,Sql Delete,我想告知用户无法删除记录的确切原因,我有以下代码来执行删除: try{ var table = Context.GetTable<TRecordType>(); lock (table) { table.DeleteOnSubmit(recordToDelete); Context.SubmitChanges(); }

我想告知用户无法删除记录的确切原因,我有以下代码来执行删除:

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);
            }
试试看{
var table=Context.GetTable();
锁(表){
表1.DeleteOnSubmit(recordToDelete);
Context.SubmitChanges();
}                
捕获(例外情况除外){
//放回记录
抛出新异常(“无法执行数据服务删除操作”,ex);
}

正如您所看到的,这非常简单,但通常由于外键约束而无法删除记录,因此我得到这个SQLException,并显示这样的消息:“DELETE语句与引用约束“FK_Something”冲突……冲突发生在数据库“X”表“dbo.Department”中",列的DepartmentId。现在,我真正想做的是至少通知用户,他无法删除该记录,因为该记录正被异常中提到的此表引用。我讨厌必须解析文本才能做到这一点,这是唯一的方法吗?如果我能够获得一个打破约束的记录引用,那将非常好我可以告诉用户“您不能删除文档A,因为文档B、C和D引用了文档A”。

首先捕获
SQLException
,因为这是您正在处理的

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

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

当然,在
recordToDelete
变量中确实有一个无法删除的记录引用


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

首先捕获
SQLException
,因为这是您正在处理的

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

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

当然,在
recordToDelete
变量中确实有一个无法删除的记录引用

您还拥有LINQ到SQL模型,因此您可以潜在地遍历到该记录的关系,以便识别引用该记录的文档