我们最近从SQL Server 2014升级到SQL Server 2016,因此在执行repo后约15秒后,存储库获取EntityCommandExecutionException
的InnerException为{"Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding."}
。
我可以手动增加模型中的超时长度来解决这个问题,但这似乎很奇怪,因为这个repo在SQL Server升级之前工作正常。底层数据库/模型,我们检索的数据大小以及服务器设置也保持不变。是否有与使用EF 6& .NET 4.6.1与SQL Server 2016,我没有考虑到?
下面是带有硬编码连接字符串的代码,以查看是否有特别需要为SQL Server 2016修改的内容。
模型构造函数(作为解决方法增加了超时量)
public OperationsModel(string connectionString, bool lazyLoading = false)
: base(connectionString)
{
Database.CommandTimeout = 500;
Configuration.LazyLoadingEnabled = lazyLoading;
Configuration.ProxyCreationEnabled = lazyLoading;
}
方式
public void Example()
{
//X'ed out the server and database, but those are correct
using (var uow = new ModelManager(new OperationsModel("data source=XXXXX;initial catalog=XXXXX;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework\" providerName=System.Data.SqlClient")))
using (var repo = new MyRepository(uow))
{
var test = repo.GetAll().ToList(); //Exception gets thrown here
}
}