Как обрабатывать UpdateException? - PullRequest
4 голосов
/ 12 июля 2011

Мне нужно обработать исключение, дубликат.

var resource = new Resource() { url = tbUrl.Text };
try
{
    context.Resource.AddObject(resource);
    context.SaveChanges();
}   
catch(UpdateException ex)
{
    // how to know exactly which is why the error occurred
}
catch (Exception ex)
{

    throw;
}

UPDATE:

Мне нужно отловить ошибку, которая возникает, когда я пытаюсь не добавлять уникальное значение . UpdateException - срабатывает при ошибке при добавлении данных.

Ответы [ 3 ]

5 голосов
/ 30 мая 2012

Это может быть немного поздно, но для тех, у кого ошибка обновления базы данных ASP.NET ищет подробности, обработчик ошибок InnerException является чрезвычайно полезным и подробным.

        try { 

            db.SaveChanges();                              
        }

        catch (System.Data.UpdateException ex)    
        {
            Console.WriteLine(ex.InnerException);
        }


        catch (System.Data.Entity.Infrastructure.DbUpdateException ex) //DbContext
        {
            Console.WriteLine(ex.InnerException);
        }

        catch (Exception ex)
        {

            Console.WriteLine(ex.InnerException);
            throw;
        }

T-SQL в базе данных предотвращает вставку повторяющихся городов.

USE [ModelFirstApplication]
GO

/****** Object:  Index [UQ_Address_City]    Script Date: 5/30/2012 7:26:16 AM ******/
ALTER TABLE [dbo].[Addresses] ADD  CONSTRAINT [UQ_Address_City] UNIQUE NONCLUSTERED 
([City] ASC)
GO

Таким образом, если пользователь попытается вставить «Spokane» второй раз в таблицу адресов в это демонстрационное приложение, обработчик вышеуказанного исключения сообщает

System.Data.UpdateException: An error occurred while updating the entries. 

See the inner exception for details. ---> 

System.Data.SqlClient.SqlException: Violation of UNIQUE KEY constraint 'UQ_Address_City'. 
Cannot insert duplicate key in object 'dbo.Addresses'. 
The duplicate key value is (Spokane).
The statement has been terminated.

Зная, какой обработчик исключений использовать, чертовски удобно, и ваш вопрос совершенно ясен.

0 голосов
/ 12 июля 2011

См. AppDomain.CurrentDomain.UnhandledException .Также для приложения WPF имеет смысл взглянуть на Application.Current.DispatcherUnhandledException

0 голосов
/ 12 июля 2011

Рекомендуется записать сообщение об исключении и трассировку стека в файл журнала и получить данные, прочитав файл журнала, который я рекомендую с помощью log4net http://sadi02.wordpress.com/2008/06/29/log4net-tutorial-in-c-net-how-can-i-show-log-in-a-file/

...