2012-02-02 79 views
3

我在ASP.net應用程序中首次使用實體框架4。 我想確保DB連接離開using語句後卻關門,在SQL Server 2005中探查,我無法看到連接註銷離開使用,只在登錄時輸入時,實體框架4不關閉sql server 2005 profiler中的連接

例如我開始一個空白頁面asp.net,並在Page_Load,我試着用這個簡單的代碼(是絕對沒有別的頁面):

using (var model = new DB("name=DB")) 
{ 
    var livre = (from l in model.books 
      select l).SingleOrDefault(); 
} 

在探查,我看到了審覈登錄,但而不是離開「使用」後的註銷。 所以,我試圖關閉連接明確,使用以下clode:

using (var model = new DB("name=DB")) 
{ 
    var livre = (from l in model.books 
      select l).SingleOrDefault(); 
    model.Connection.Close(); 
} 

我再次看到登錄,但沒有註銷。奇怪的是,當我在關閉之後檢查model.Connection中的ConnectionState屬性時,它指示'Closed',但不在Sql Server中。

要查看SQL Server中的實際註銷,我必須在VS2010中按停止調試按鈕,並且當我重新啓動Web應用程序時,只有這樣我才能看到註銷(以下是我的頁面處理時的實際登錄) 。

我開始懷疑SQL Server中是否有某些東西可以保持連接打開,即使在代碼中關閉了連接。

有什麼想法?

感謝

+2

這是一個預期的行爲閱讀關於[連接重用/池](http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx) – 2012-02-02 15:17:47

+0

將:Pooling = false添加到sql連接字符串,但注意性能影響。 – Tomek 2012-02-02 15:23:36

+2

我懷疑你在工作中看到[連接池](http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx)。池維護連接的地方,以便它可以迅速重用於下一個請求。 – EBarr 2012-02-02 15:18:01

回答

0

是的,有一些是在SQL服務器將保持連接:連接池。由於打開和關閉數據庫連接是一項昂貴的操作,因此SQL Server會管理將分配給連接請求的連接池。粗略地說,如果請求連接字符串與池中非活動連接的連接字符串相匹配,SQL Server會將連接分配給請求。