“Impossible de supprimer la base de données car il est actuellement en cours d'utilisation”. Comment réparer?
Avoir ce simple code j'ai "Impossible de supprimer la base de données "test_db" car il est actuellement en cours d'utilisation" (méthode de Nettoyage) comme je l'exécuter.
[TestFixture]
public class ClientRepositoryTest
{
private const string CONNECTION_STRING = "Data Source=.;Initial Catalog=test_db;Trusted_Connection=True";
private DataContext _dataCntx;
[SetUp]
public void Init()
{
Database.SetInitializer(new DropCreateDatabaseAlways<DataContext>());
_dataCntx = new DataContext(CONNECTION_STRING);
_dataCntx.Database.Initialize(true);
}
[TearDown]
public void CleanUp()
{
_dataCntx.Dispose();
Database.Delete(CONNECTION_STRING);
}
}
DataContext a une propriété comme cela
public DbSet<Client> Clients { get; set; }
Comment pouvez forcer mon code pour supprimer la base de données?
Grâce
- CTP5 est mort. La version actuelle est EF 4.1.
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que votre demande sans doute encore certains de connexion à la base de données (ou une autre application contient de connexion ainsi). La base de données ne peut pas être supprimé s'il y a d'autres connexion ouverte. Le premier problème peut être probablement résolu en tournant le regroupement de connexion off (ajouter
Pooling=false
à votre chaîne de connexion) ou désactivez la piscine avant de supprimer la base de données (en appelantSqlConnection.ClearAllPools()
).Les deux problèmes peuvent être résolus en forçant la base de données à supprimer, mais pour cela vous avez besoin de base de données personnalisée de l'initialiseur où vous passez la base de données en mode mono-utilisateur et après que de le supprimer. Ici est un exemple de la manière d'y parvenir.
J'allais faire le fou avec ça! J'ai une base de données ouverte de connexion à l'intérieur de
SQL Server Management Studio (SSMS)
et une table de requête de l'ouvrir pour voir le résultat de quelques tests unitaires. Lors de la ré-exécuter les tests à l'intérieur de Visual Studio, je veux qu'ildrop
la base de données toujours MÊME SI le lien est ouvert dans SSMS.Voici définitive moyen de se débarrasser de
Cannot drop database because it is currently in use
:Entity Framework Initialisation De La Base De
L'astuce consiste à remplacer
InitializeDatabase
méthode à l'intérieur de la coutumeInitializer
.Copié partie pertinente ici pour l'amour de
good
DUPLICATION... 🙂IF EXISTS
et c'est parfait.IF EXISTS
?Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\wingtiptoys.mdf;Integrated Security=True
?C'est une très agressif de la base de données (re)initialiseur pour EF code-première avec les migrations; vous l'utilisez à vos risques et périls, mais il semble fonctionner assez renouvelable pour moi. Il le fera;
Voici la classe;
L'utiliser comme ceci;
J'utilise aussi Ladislav Mrnka du "Pooling=false' truc, mais je ne suis pas sûr si c'est nécessaire ou tout simplement une ceinture-et-accolades mesure. Il y a certainement contribuer à ralentir le test plus.
Aucune de ces deux solutions n'a fonctionné pour moi. J'ai fini par écrire une méthode d'extension qui fonctionne:
database.Connection.CreateCommand()
, nous pouvons utiliserdbContext.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, sqlString)
. Sinon c'est une belle solution.database.Connection.CreateCommand()
? Je n'ai pas eu de problèmes. Merci!Database.SetInitializer(new EventDatabaseInitializer());
?J'ai essayer d'ajouter
Pooling=false
comme Ladislav Mrnka dit, mais toujours l'erreur.Je suis en utilisant Sql Server Management Studio et même si je ferme la connexion, j'obtiens l'erreur.
Si je ferme Sql Server Management Studio la Base de données est supprimé 🙂
J'espère que cela aide
Sql Server Management Studio
, notez que par habitude, vous avezTWO
connexions en cours d'exécution il,one for the object explorer AND one for the current query
si vous fermez/commutateur de deux d'entre eux, il doit travaillerJ'ai eu le même message d'erreur. Dans mon cas, j'ai juste fermé la connexion à la base de données et puis re-connecté une fois le dans mon cas, le nouveau modèle a été ajouté et un nouveau contrôleur a été échafaudée. C'est toutefois une solution très simple et n'est pas recommandé pour tous les scénarios, si vous souhaitez conserver vos données.
J'ai eu le même problème alors. S'avère la solution est de fermer la connexion dans l'onglet Explorateur de serveurs dans Visual Studio. Donc, vous pourriez peut-être vérifier si la connexion est toujours ouvert dans l'Explorateur de serveurs.
Sa simple car u est toujours grâce à la même db quelque part, ou une connexion est toujours ouverte.
Alors juste l'exécuter "UTILISER le maître" en premier (si existe, mais est souvent le cas), puis déposer l'autre db. Toujours, cela devrait fonctionner!
Grz Jean