我想告诉用户无法删除记录的确切原因,我有此代码执行删除:
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所引用的那样。
答案 0 :(得分:1)
首先专门捕捉SQLException
,因为这就是你正在处理的事情。
其次,检查以确保异常是您所期望的异常。你还需要处理其他SQLException
,或者重新抛出它们。
您将不得不解析文本(排序 - 只使用RegEx),因为这是从SQL Server返回的消息。它引用表名和数据库约束,而不是对象或应用程序知道的任何其他内容。
当然,您确实在recordToDelete
变量中引用了无法删除的记录。
您还拥有LINQ-to-SQL模型,因此您可以遍历与该记录的关系,以便识别引用它的文档。