web-dev-qa-db-ja.com

aspnetcore / entityframeworkcoreでコマンドタイムアウトを設定する方法

コマンドのタイムアウトが設定される場所は、以前のバージョンと同じではなくなりました。

ただし、これを変更する方法を示す場所は見つかりません。

私がやっていることは、非常に大きなファイルをアップロードすることです。これは、保存するのにデフォルトの30秒よりも時間がかかります。

別の質問のように移行タイムアウトではなく、コマンドタイムアウトについて尋ねていることに注意してください。

26
Greg Gum

DIコンテナーを使用してDbContextを管理している場合(つまり、サービスコレクションにDbContextを追加している場合)、コマンドタイムアウトをオプションで指定できます。

Startup.ConfigureServicesで:

services.AddDbContext<YourDbContext>(options => options.UseSqlServer(
    this.Configuration.GetConnectionString("YourConnectionString"),
    sqlServerOptions => sqlServerOptions.CommandTimeout(60))
);
49
Carl Sharman

コンテキストを介して変更できます

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
    {
        Database.SetCommandTimeout(150000);
    }
}
22
The Integrator

より良いオプションは、コンテキスト設定中にCommandTimeoutを使用することです:

public class DbConnect: IConnnectDb
{
    private dbentitient _context;

    // inject this to a db entity from constructor. 

    //inside each method now use the follow before u actually run the query to db.  

    _context.Database.SetCommandTimeout(400);
}     

注:EF Coreは、100秒未満の時間でのみクエリを実行します。それ以上の場合、再試行を続け、結果が表示されなくなります。

それが今の私の経験ですので、修正できるかどうか教えてください。EFCore 1.0はEF Core 2.0よりもさらに速くタイムアウトします。

1
venkat