如何通过编码(不在连接字符串中)设置上下文的connectionTimeout(而不是commandTimeout)的值? 这是只读:
DbContext.Database.Connection.ConnectionTimeout = 10;
由于
UDPATE:
我的问题是测试我的上下文是否快速可用且默认时间是否很长? 我试过这个:
int? oldTimeOut = RepositoryDbContext.Database.CommandTimeout;
try
{
RepositoryDbContext.Database.Connection.ConnectionTimeout = 10; //readonly
RepositoryDbContext.Database.CommandTimeout = 10; // doesn't work, the value stay the same
RepositoryDbContext.Database.Connection.Open();
RepositoryDbContext.Database.Connection.Close();
return true;
}
catch
{
return false;
}
finally
{
RepositoryDbContext.Database.CommandTimeout = oldTimeOut;
}
但是我无法更改connectionTimeout是readOnly并且commandTimeout没有设置值...
答案 0 :(得分:2)
我不知道通过EF API更改连接超时的任何选项。但是,您可以在运行时更改连接字符串。您可以解析配置的连接字符串并更改超时参数,如果不存在则添加一个。
如果您只使用SQL Server,我建议使用SqlConnectionStringBuilder。使用带existing connection string的构造函数,更改ConnectTimeout,获取modified connection string,并在constructing your DbContext时使用该连接字符串。
根据您实际尝试解决的问题,一种替代方法可能是使用SlowCheetah轻松生成具有不同配置字符串的web.config,用于不同的构建类型。
http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5
<强>更新强>
根据您的评论...
尝试类似
的内容string normalConnectionString = RepositoryDbContext.Database.Connection.ConnectionString;
var connectionBuilder = new SqlConnectionStringBuilder(normalConnectionString);
connectionBuilder.ConnectTimeout = 10;
string testConnectionString = connectionBuilder.ConnectionString;
using (var testRepositoryDbContext = new RepositoryDbContextType(testConnectionString))
{
try
{
testRepositoryDbContext.Database.Connection.Open();
testRepositoryDbContext.Database.Connection.Close();
return true;
}
catch
{
return false;
}
}