web-dev-qa-db-ja.com

エンティティフレームワーク4.3でコマンドタイムアウトを設定する

エンティティフレームワーク4.3とそのDbContextを使用して、linqクエリのコマンドタイムアウトを設定する方法が見つかりません。エンティティフレームワークでCommandtimeoutを増やすにはどうすればよいですか?

[〜#〜] edit [〜#〜]私は実際にコマンドタイムアウトの増加を探しています。私はこの2つを混同しました。接続ではなく、タイムアウトしているのはsqlコマンドです。

ありがとう

32
Saher Ahwal

DbContextを使用している場合、まずObjectContextにドロップダウンする必要があります。

((IObjectContextAdapter)context).ObjectContext.CommandTimeout = 180;
62
bricelam

アプリケーションに格納されている一部のストアドプロシージャの長い処理時間を処理するために、Contextクラスにコマンドタイムアウト値を追加しました。トリックを行ったようです。

public partial class ExampleEntities : DbContext
    {
        public ExampleEntities()
            : base("name=ExampleEntities")
        {
            ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 180;
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
10
Maurice Jordan

このコマンドで十分です。

((System.Data.Entity.Infrastructure.IObjectContextAdapter) context).ObjectContext.CommandTimeout
                = 180;
9
m-Abrontan

次のように、awaitを使用するときにCommandTimeoutの設定に問題がありました。

await _dbContext.Database.Connection.QueryAsync("Update ....")

その後、ドキュメントで見つけました https://docs.Microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.commandtimeout?view=netframework-4.8

CommandTimeoutプロパティは、BeginExecuteReaderなどの非同期メソッド呼び出し中は無視されます。

変更後:

_dataWarehouseDbContext.Database.Connection.Query("Update ...")

とCommandTimeoutが動作を開始します:)

0