2010-12-21 7 views
1

Je crée un programme qui transfère une base de données d'un serveur SQL (sur un PC) vers une instance locale. Après le transfert, une API (Entity framework) va s'y connecter et y exécuter certaines choses. Il sera ensuite déconnecté et deux scripts SQL seront exécutés via la classe SqlCommand. Après cela, la base de données sera sauvegardée et sauvegardée et la base de données locale et temporaire sera supprimée. Le problème que je rencontre est que l'instance SqlCommand qui se connecte en premier (avant que le transfert ait lieu) qui crée la base de données, se déconnecte sans problème (je vérifie les connexions actives via le studio de gestion). Mais une fois le contexte d'entités connecté, même avec un appel context.Dispose(), il ne se déconnecte pas. Ensuite, je crée une instance de serveur pour exécuter des scripts SQL (situé dans un sous-dossier) avec un code similaire à ceci:C# ConnectionContext et EF ne rompent pas la connexion DB

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(); 

L'appel Disconnect ici ne marche pas rompre la connexion soit. Donc, quand je vais déposer la base de données, je trouve que je ne peux pas parce qu'il y a 2 connexions actives. Y at-il quelque chose que je fais mal ici ou quelque chose qui me manque? Le NonPooledConnection = true était quelque chose que j'ai trouvé en ligne pour essayer si le débranchement ne fonctionnait pas mais évidemment cela non plus. Sinon, mon code ressemblerait à:

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(); 

Je suis sûr que je déconnecte les connexions précédentes avant d'en créer de nouvelles. La seule façon de déconnecter les entités est de fermer le programme et ce n'est pas ce que je veux évidemment.

Toute aide serait appréciée, merci.

Répondre

1

Je viens de découvrir que faire un SqlConnection.ClearAllPools() résout le problème et déconnecte toutes les connexions actives.