Как справиться с UpdateException?

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

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;
}

ОБНОВИТЬ:

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

3 ответа

Это может быть немного поздно, но для тех, кто ищет подробности об ошибке обновления базы данных 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.

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

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

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

Другие вопросы по тегам