2010-12-21 84 views
1

我正在創建一個程序,它將數據庫從一臺SQL服務器(在一臺PC上)傳輸到本地實例。轉移後,一個API(實體框架)將連接到它並運行一些東西。它會斷開連接,並且兩個SQL腳本將通過SqlCommand類運行在它上面。之後,數據庫將被備份並保存,本地臨時數據庫將被刪除。我遇到的問題是,首先連接(傳輸發生之前)創建數據庫的SqlCommand實例,斷開連接沒有問題(我通過管理工作室檢查活動連接)。但是,一旦實體上下文連接,即使使用context.Dispose()調用,它也不會斷開連接。然後,我創建具有相似代碼服務器實例來運行SQL腳本(位於子文件夾),以這樣的:c#ConnectionContext和EF不會中斷數據庫連接

FileInfo file = new FileInfo(filename); 
string removeRecords = file.OpenText().ReadToEnd(); 
file.OpenText().Close(); 

Server srv = new Server(new ServerConnection(this.myScriptConn)); 
ServerConnection srvConn = new ServerConnection(); 
srvConn.NonPooledConnection = true; 
srvConn = srv.ConnectionContext; 

Server server = new Server(srvConn); 

server.ConnectionContext.ExecuteNonQuery(removeRecords); 

server.ConnectionContext.Disconnect(); 

在這裏斷開通話犯規或者斷開連接。所以當我放棄數據庫時,我發現我不能,因爲有2個活動連接。有什麼我在這裏做錯了或我錯過了什麼? NonPooledConnection = true是我在網上發現的嘗試,如果斷開連接沒有工作,但顯然沒有。否則,我的代碼是這樣:

FileInfo file = new FileInfo(filename); 
string removeRecords = file.OpenText().ReadToEnd(); 
file.OpenText().Close(); 

Server server = new Server(new ServerConnection(this.myScriptConn)); 
server.ConnectionContext.ExecuteNonQuery(removeRecords); 

server.ConnectionContext.Disconnect(); 

我相信,我做任何新的之前先斷開連接。斷開實體的唯一方法是關閉程序,這不是我想要的。

任何幫助,將不勝感激,謝謝。

回答

1

我剛發現做一個SqlConnection.ClearAllPools()修復了這個問題,並斷開了所有活動的連接。