我使用Entity Framework访问我的SQL数据。我的数据库模式中有一些约束条件,我想知道如何处理由这些约束条件导致的异常。
例如,在两个用户尝试同时向数据库添加(几乎)相同的实体时,我会遇到以下异常:
System.Data.UpdateException
"An error occurred while updating the entries. See the InnerException for details."
(inner exception) System.Data.SqlClient.SqlException
"Violation of UNIQUE KEY constraint 'Unique_GiftId'. Cannot insert duplicate key in object 'dbo.Donations'.\r\nThe statement has been terminated."
我应该如何正确地捕获这个特定的异常?
不完美的解决方案:
catch (UpdateException ex)
{
SqlException innerException = ex.InnerException as SqlException;
if (innerException != null && innerException.Message.StartsWith("Violation of UNIQUE KEY constraint 'Unique_GiftId'"))
{
// handle exception here..
}
else
{
throw;
}
}
现在虽然这种方法可以工作,但它有一些缺点:
- 没有类型安全性:代码依赖于包含唯一列名称的异常消息。
- 依赖于SqlCLient类(破坏了抽象)
你知道更好的解决方案吗? 感谢所有的反馈..
注意:我不想在应用程序层手动编写约束条件,我希望将它们放在数据库中。