实体设置连接超时

时间:2014-09-24 15:23:56

标签: c# entity-framework timeout

如何通过编码(不在连接字符串中)设置上下文的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没有设置值...

1 个答案:

答案 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;
    }
}