我正在用C#写一个访问SQL Server 2005数据库的应用程序。该应用程序的数据库密集程度相当高,即使我尝试优化所有访问,设置适当的索引等,我期望我迟早会遇到死锁。我知道为什么发生数据库死锁,但是我怀疑我能够在没有发生死锁的情况下发布软件。该应用程序正在使用实体框架进行数据库访问。在C#中处理SQL死锁的模式?
在C#客户端代码中是否有处理SQLExceptions(死锁)的好模式 - 例如在x毫秒后重新运行语句批处理?
澄清;我并不是在寻找如何避免死锁的方法(隔离级别,索引,语句顺序等),而是在实际发生时如何处理它们。
您能告诉我您是如何执行事务的实际重新运行吗?您是否在每一个有交易的地方为代码添加了一个简单的循环,或者您是否想出了一个更通用的解决方案? – martin
我们实现了一个循环。如果事务失败,由于死锁情况,我们将整个事务处理回来,然后再次尝试5次。 –