EFコア - System.InvalidOperationException:ExecuteReaderには開いている利用可能な接続が必要です。接続の現在の状態は閉じています

asp.net-core c# entity-framework entity-framework-core

質問

私は、Entity Framework CoreでASP.NET Core 1.0 Webアプリケーションを実行しています。アプリケーションがしばらく(24〜48時間)実行されていると、アプリケーションはあらゆるエンドポイントまたは静的リソースへのすべての要求でクラッシュし、 System.InvalidOperationException: ExecuteReader requires an open and available Connection. The connection's current state is closed.スローSystem.InvalidOperationException: ExecuteReader requires an open and available Connection. The connection's current state is closed.私は、App Poolを再起動するだけでこれを回復できます。

私はEntity Frameworkを次のように設定しています:

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));   
}

私はこのような拡張メソッドでデータをowinパイプラインにロードしています:

Startup.cs

app.LoadTenantData();

AppBuilderExtensions.cs:

public static void LoadTenantData(this IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            var dbContext = app.ApplicationServices.GetService<ApplicationDbContext>();        
            var club = dbContext.Clubs.Single(c => c.Id == GetClubIdFromUrl(context));
            context.Items[PipelineConstants.ClubKey] = club;
            await next();
        });
    }

エラーはアプリケーションが長時間実行されている場合にのみ発生するため、再現するのは難しいですが、EFの開閉に間違いがあると想定しています。

これをデバッグするにはどうすればいいですか? EFを間違って使用していますか?

人気のある回答

私は同じ問題がある。

私は、同じdbcontextインスタンスが複数のスレッドによって同時に使用されている可能性が高いと思います。

あなたはこれが必要かもしれません: services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")),ServiceLifetime.Transient);それについての問題があります。 https://github.com/aspnet/EntityFramework/issues/6491



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ