Как справиться с 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/