实体设置连接超时
本文关键字:超时 连接 设置 实体 | 更新日期: 2023-09-27 18:24:10
如何通过编码(不在连接字符串中)设置上下文的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没有设置值。。。
我不知道有任何通过EF API更改连接超时的选项。但是,您可以在运行时更改连接字符串。您可以解析配置的连接字符串并更改超时参数,或者在不存在超时参数的情况下添加一个。
如果您只使用SQL Server,我建议您使用SqlConnectionStringBuilder。使用获取现有连接字符串的构造函数,更改ConnectTimeout,获取修改后的连接字符串,并在构造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;
}
}