簡體   English   中英

實體集連接超時

[英]Entity set connection 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不會設置該值...

我不知道可以通過EF API更改連接超時的任何選項。 但是,您可以在運行時更改連接字符串。 您可以解析配置的連接字符串並更改超時參數,如果不存在則添加一個。

如果僅使用SQL Server,則建議使用SqlConnectionStringBuilder 構造DbContext時,使用采用現有連接字符串的構造函數,更改ConnectTimeout ,獲取修改后的連接字符串 ,並使用該連接字符串。

根據您實際要解決的問題,一種替代方法可能是使用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;
    }
}   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM