我使用实体框架访问我的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;
}
}
现在,尽管这种方法行之有效,但它也有一些缺点:
您知道更好的解决方案吗?感谢您的所有反馈。
注意: 我不想在应用程序层中手动编写约束,而是希望将它们存储在数据库中。
您应该能够捕获SQL错误号(即SqlException.Number)。
在这种情况下,对于SQL Server来说永远是2627。
如果要抽象,则对数据库引擎总是有一定的依赖性,因为每个引擎都会抛出不同的异常号和消息。
我无法解决这个问题。 非常感谢任何帮助。如需更多信息,请发电子邮件。
问题内容: 我需要一种使用实体框架LINQ区分SQL异常的方法,例如,当我从DbUpdateException获得的所有信息都是大量嵌套的内部异常和无用的长错误消息时,如何区分前面的关键约束违例或唯一约束违例?是否有任何较低级别的例外,我可以在其中执行“ Catch FKException”之类的操作;捕获“ uniqueException”或类似的东西。 问题答案: 正在使用sql错误代码…
考虑以下(非常简化的)实体: 在我的映射器中,我可以设置用户罚款,但是一旦执行以下代码(在数据库中保留任何更改之前)
问题内容: 假设我有某种游戏。我有一个buyItem函数,如下所示: 如果我对该路由进行垃圾邮件处理,直到扣除用户余额(第二次查询),则用户余额仍为正。 我尝试过的 问题是将在第一〜5项要求。因此,这也不起作用。 我们如何处理这种情况?如果重要的话,我正在使用Sails.JS框架。 问题答案: 通过该方法,Sails 1.0现在具有完整的事务支持。例: 更新资料 正如一些评论者所指出的,启用连接池
在我的应用程序中,我正在为视图的高度约束设置动画,当高度约束更改时,视图会向下平移一段时间,尽管我将约束设置为0。下面是我用来设置更改动画的代码: 下面是创建所有可扩展视图的方法: 对我来说,问题不在于如何设置高度变化的动画,因为这是可行的,而在于解决一个事实,即在一段时间内,应用程序似乎忽略了顶部的约束。这是显示动画的gif
问题内容: 我遵循了MVC 3中的教程,并执行了以下操作: 制作了4个类和一个DBClass: [有一个] s的列表[有一个] s的列表[有一个] s的列表[每个标记的单词都是其自己的类]。 然后,我制作了一个这样的类: 然后,我添加了和,并导航至,然后看到了以下消息: 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。验证实例名称正确,并且已将SQL