2017-06-14 103 views
0

我們使用MySql nuget包在.NET Core和Entity Framework Core中開發了一個項目。EF Core MySql連接不關閉

上下文被加到使用以下行扶養注射:

services.AddDbContext<ReadWriteContext>(options => options.UseMySQL(Configuration["Machine:ReadWriteConnectionString"])); 

然後,在控制器,這個注入這樣:

public class SystemController : Controller 
{ 
    private readonly ReadWriteContext _dataContext; 

    public SystemController(ReadWriteContext dataContext) 
    { 
     _dataContext = dataContext; 
    } 

    ... 

} 

並用作例如:

var hasServices = await _dataContext.Services.AnyAsync(); 

在日誌中我們看到了開始和結束日誌行:

Opening connection to database 'config_service' on server '10.211.55.5'. 
Closing connection to database 'config_service' on server '10.211.55.5'. 

但是,當我們查看MySql服務器並運行「show full processlist」時,連接仍顯示爲處於睡眠狀態並且從不關閉。當您停止.NET進程時,連接將關閉並從MySql進程列表中消失。

當請求完成時,我如何獲得連接關閉。 AddDbContext應該被限制到當前的請求,但它似乎沒有正確關閉連接。

任何幫助將是偉大的?

+0

.Net通常使用一個連接池,它不會中斷連接,它不會無故地保持活動狀態。如果您需要強制連接,我認爲您需要處理上下文。 – VMAtm

回答

1

我不知道用MySql。這就是說,如果你在SQL服務器上下文中,你將面臨「連接池」:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling

這是您的應用程序保持一組活動連接以加速到達數據服務器的過程。因此,即使你去游泳池「我不再需要這個連接」,它也不會相信你並保持連接打開......以防萬一。

多長時間,它取決於超出應用程序範圍的邏輯。一個用途是說:這是連接池領域,讓它做他的工作。

所以你的問題的答案是:你不能明確關閉到服務器的連接。連接池將決定何時關閉。