ASPNetCore + SqlException: Database 'X' already exists. Choose a different database name.
Avec ASP net Core, certaines habitudes changent. Entre autres, au lieu d’utiliser le vénérable dossier App_Data
pour les tests sur une base de données locale, on utilise souvent MsSQLLocalDb.
Mais quand on ne sait pas bien l’utiliser, on peut rapidement faire de grosses erreurs qui conduisent à avoir des problèmes dont il est difficile de sortir.
Il y a peu, je me suis retrouvé avec une exception étrange :
SqlException: Database 'X' already exists. Choose a different database name.
Ma chaine de connexion était la suivante:
Server=(localdb)\\mssqllocaldb;Database=X;Trusted_Connection=True;MultipleActiveResultSets=true
Le fichier X.mdb n’était pas présent dans le dossier de mon profile utilisateur (%userprofile%
)...
Par le passé, j’avais effectivement déjà utilisé ce nom pour une base de données et un projet ASP net classique, puis supprimé les fichiers…. (pensant faire le ménage proprement).
Malheureusement en faisant de la sorte j’ai maltraité MsSQLLocalDb au-delà de ce qu’il est en mesure de supporter. Pour réparer MsSQLLocalDb, il faut l’arrêter, supprimer sa configuration, puis le relancer.
Heureusement, cela est facilement faisable via la console. Il suffit d’exécuter les commandes suivantes :
sqllocaldb stop
sqllocaldb delete
sqllocaldb start
Après chaque commande, la console est censée afficher une information de confirmation.
Aucun reboot n’est utile et tout doit revenir dans l’ordre.
Moralité
Toujours lire la documentation d’un outil avant de le maltraiter et de dire ensuite qu’il fonctionne mal.