在C#中处理SQL死锁的模式?

我正在用C#编写一个访问SQL Server 2005数据库的应用程序。 该应用程序是数据库密集型的,即使我尝试优化所有访问,设置正确的索引等等,我希望我迟早会遇到死锁。 我知道为什么会发生数据库死锁,但我怀疑我是否能够在没有发生死锁的情况下发布软件。 该应用程序正在使用Entity Framework进行数据库访问。

在C#客户端代码中是否有任何处理SQLExceptions(死锁)的好模式 – 例如在x毫秒后重新运行语句批处理?

澄清; 我不是在寻找一个如何避免死锁的方法(隔离级别,索引,语句顺序等),而是在实际发生时如何处理它们。

我发布了一个代码示例来处理这一段时间,但是在过渡期间似乎失去了我的帐户所以我现在找不到它我害怕并且没有我在这里使用的代码。

简短的回答 – 将东西包裹在try..catch中。 如果你发现一个看起来像死锁的错误,请暂停一小段随机时间并增加重试计数器。 如果您收到其他错误或重试计数器清除了您的阈值,请将错误返回到调用例程。

(如果可以的话,尝试在一般程序中打开它,并通过它运行大部分/全部数据库访问,这样你就可以在程序范围内处理死锁。)

编辑:啊,教我不要使用谷歌! 以前的代码示例我和其他人给出的是如何在C#中使用ADO获得高效的Sql Server死锁处理?

以下是我在上一个应用程序框架中采用的方法。 当我们检测到死锁时,我们只是重新进行交易。 我们这样做了5次。 如果5次失败后,我们会抛出exception。 我不记得第二次尝试失败的时间。 我们知道,因为我们在后端代码中记录了所有活动。 所以我们知道任何时候发生了死锁,我们知道它是否失败超过5次。 这种方法对我们很有用。

兰迪