2016-08-01 5 views
2

저는 Entity Framework Core가있는 ASP.NET Core 1.0 웹 응용 프로그램을 실행하고 있습니다. 앱이 잠시 (24 ~ 48 시간) 실행되면 앱이 임의의 엔드 포인트 또는 정적 리소스에 대한 모든 요청에 ​​대해 충돌을 시작하여 System.InvalidOperationException: ExecuteReader requires an open and available Connection. The connection's current state is closed. 오류가 발생합니다. 앱 풀을 다시 시작하여 복구 할 수 있습니다.EF 코어 - System.InvalidOperationException : ExecuteReader 열려 있고 사용 가능한 연결이 필요합니다. 연결의 현재 상태가 닫힙니다.

나는이 같은 엔티티 프레임 워크를 구성하고있다 :

Startup.cs

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

이 같은이 같은 확장 방법으로 owin 파이프 라인에서 데이터를로드 오전 :

Startup.cs

app.LoadTenantData(); 
AppBuilderExtensions.cs :앱에서 오랜 시간 동안 실행 된 경우에만 오류가 발생하기 때문에 0
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 파이프 라인 내부의 모든 테넌트 데이터를로드하는 작업이 끝났습니다. https://github.com/severisv/MyTeam/blob/master/src/MyTeam/Filters /LoadTenantDataAttribute.cs 필터가 올바른 순서로 추가 된 경우에만 작동합니다. – severin

답변

1

같은 문제가 있습니다.

동일한 dbcontext 인스턴스가 여러 스레드에서 동시에 사용되는 것 같습니다.

다음이 필요할 수 있습니다. services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")),ServiceLifetime.Transient); 문제가 있습니다. https://github.com/aspnet/EntityFramework/issues/6491