エンティティフレームワーク4.3とそのDbContextを使用して、linqクエリのコマンドタイムアウトを設定する方法が見つかりません。エンティティフレームワークでCommandtimeoutを増やすにはどうすればよいですか?
[〜#〜] edit [〜#〜]私は実際にコマンドタイムアウトの増加を探しています。私はこの2つを混同しました。接続ではなく、タイムアウトしているのはsqlコマンドです。
ありがとう
DbContextを使用している場合、まずObjectContextにドロップダウンする必要があります。
((IObjectContextAdapter)context).ObjectContext.CommandTimeout = 180;
アプリケーションに格納されている一部のストアドプロシージャの長い処理時間を処理するために、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();
}
このコマンドで十分です。
((System.Data.Entity.Infrastructure.IObjectContextAdapter) context).ObjectContext.CommandTimeout
= 180;
次のように、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が動作を開始します:)