2016-08-01 26 views
2

私は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.アプリプールを再起動することでしか回復できません。EFコア - System.InvalidOperationException:ExecuteReaderには開いている利用可能な接続が必要です。接続の現在の状態は閉じています

私はこのようなエンティティフレームワークを構成しています:

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

Startup.cs

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

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を間違って使用していますか?

+0

あなたはこれをどのように修正しましたかについてここで更新できますか?私は同じ問題を抱えています。私は非同期を使用しており、どこにでもdbクエリを持っています。これは、負荷テストの際に約30%のケースが続いています。ありがとうございます。 –

+0

私は問題を解決できませんでした。つまり、アクションフィルタを使用してMVCパイプライン内のすべてのテナントデータをロードしました。 /LoadTenantDataAttribute.cs これは、フィルタが正しい順序で追加された場合にのみ機能します – severin

答えて

1

同じ問題が発生しました。

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

あなたが必要な場合があります: services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")),ServiceLifetime.Transient); 問題があります。 https://github.com/aspnet/EntityFramework/issues/6491

関連する問題