EF Core - 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來恢復。

我正在配置實體框架,如下所示:

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
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow