异常#1:
无法在数据库“model”上获得独占锁定。请稍后重试。CREATE DATABASE失败。列出了一些文件名无法创建。检查相关错误。
异常#2:
超时已过期。操作完成之前超时时间已过或服务器未响应。
这可能是两者之一,并在我的代码同一行抛出异常(当EF创建数据库时)。显然,在SQL Server中,创建数据库是逐个完成并锁定“model”数据库(请参见here),因此某些等待的任务会超时或发生“model”错误。 这些测试是在我们的开发 SQL Server 2014实例(12.0.4213)上进行的,如果我执行100个并行任务,则必定会在某些任务或甚至几乎一半的任务中抛出错误。但是最令人不安的是,当我在另一个 SQL服务器实例(12.0.2000)上测试时,它完全没有抛出任何错误,并且可以完成我执行的所有任务(即使是1000个并行任务!)。到目前为止,我尝试过的解决方案都没有起作用。
- 将EF中对象上下文的超时时间更改为无限
- 尝试在连接字符串上添加更长或无限的超时时间
- 尝试在EF上添加重试策略并将其设为更长且更频繁运行
- 目前正在尝试安装与我们的Dev服务器类似环境的虚拟机(使用Windows Server 2014 R2),并在特定版本的SQL Server上进行测试,以尝试查看版本是否与此有关(是的,我很绝望 :))
无论如何,这里有一个简单的C#控制台应用程序,您可以下载并尝试复制该问题。此测试应用程序将执行您输入的N个任务,并仅创建数据库,然后立即进行清理。