实体设置连接超时

本文关键字:超时 连接 设置 实体 | 更新日期: 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;
    }
}