2010-12-11 1 views
1

Я хотел бы сообщить пользователю точной причины, почему запись не может быть удалена, у меня есть этот код для выполнения удалений:Как сделать Linq к Sql Удалить Exception сообщения более дружественный к пользователю

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», column 'DepartmentId. Теперь то, что я действительно хотел бы сделать, это сообщить пользователю, что он не может удалить запись, потому что ссылается на эту таблицу, упомянутую в исключении. имеющих se текст, чтобы сделать это, это единственный способ? Также было бы очень приятно, если бы я мог получить ссылку на запись, нарушающую ограничение, поэтому я могу сказать пользователю: «Вы не можете удалить документ A, на который ссылаются документы B, C и D».

ответ

1

Начните с того, что вы поймаете SQLException, так как это то, что вы обрабатываете.

Во-вторых, убедитесь, что исключение - это то, что вы ожидаете. Вам нужно будет либо обрабатывать другие SQLException с, либо перебросить их.

Вам нужно будет разобрать текст (отберите - просто используйте RegEx), потому что это сообщение, которое было возвращено с SQL Server. Он ссылается на имена таблиц и ограничения базы данных, а не объекты или что-то еще, о чем ваше приложение знает.

Конечно, у вас есть ссылка на запись, которая не может быть удалена, в переменной recordToDelete.

У вас также есть модель LINQ-to-SQL, поэтому вы можете отслеживать отношения с этой записью, чтобы идентифицировать документы, которые ссылаются на нее.