EF5: impossible de joindre le fichier "{0}" en tant que base de données "{1}"


140

Je rencontre le problème exact comme décrit ici (lire la section "Impossible de joindre au fichier MDF supprimé"), mais la solution au problème n'y est pas indiquée ...

En bref, le problème est qu'après la suppression du .mdffichier, l'exception suivante est levée lorsque j'essaie d'accéder à la base de données à l'aide d'EF 5.0.

DataException-> EntityException-> SqlException:
impossible de joindre le fichier «{0}» en tant que base de données «{1}»

J'ai supprimé le fichier DB et maintenant je reçois ce message d'erreur désagréable lors de l'exécution de l'application en m'attendant à utiliser son initialiseur. Aucun moyen de réparer cela?


1
Désolé, je n'ai pas fourni de réponse précise, mais à l'époque, je n'avais pas de solution qui fonctionne à 100% du temps. J'essaye d'éviter l'erreur maintenant en n'utilisant pas les bases de données attachées par l'utilisateur. Je pourrais généralement corriger l'erreur en me connectant à SQL Server Management Studio et en détachant la base de données dans l'erreur.
OdeToCode

Le problème est que la base de données n'existe plus car j'ai déjà supprimé le fichier physique. J'ai en fait essayé de m'en occuper dans l'un des studios (intégré en VS et externe). Ma réponse n'est vraiment pas une solution mais plutôt une solution de contournement, elle indique simplement que vous n'avez pas à vous en tenir à LocalDb.
Shimmy Weitzhandler

De l'expert EF Rowan Miller - voir romiller.com/2013/05/17/ ... Nous espérons fournir de meilleures solutions dans la prochaine version de VS.
RickAndMSFT

Réponses:


220

Si vous supprimez le fichier DB, il reste toujours enregistré avec SqlLocalDB. Parfois, il le corrige pour supprimer la base de données. Vous pouvez le faire à partir de la ligne de commande.

  1. Ouvrez le "Developer Command Propmpt for VisualStudio" dans le menu Démarrer / Programmes.
  2. Exécutez les commandes suivantes:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0


1
Je n'ai pas trouvé Sql Server Object Explorer, je suppose que j'utilise VS 2012 Express. Donc, je ne peux pas essayer la réponse acceptée. Cependant, votre réponse a parfaitement fonctionné pour moi. Merci.
newman

3
Votre réponse vient de me sauver. Je n'avais pas le sous-nœud (localdb) \ v11.0 de la réponse acceptée et je ne pouvais pas supprimer les références de SQL Management Studio, alors hourra pour vous!
Santux

18
Cela a fonctionné pour moi après la suppression des fichiers. Vous pouvez également exécuter les commandes depuis Outils -> Gestionnaire de packages de bibliothèque -> Console du gestionnaire de packages.
Bart Verkoeijen

11
En remarque, le v11.0est spécifique à SQL LocalDB 2012. Si vous utilisez LocalDB 2014, MS l'a renommé à la MSSqlLocalDbplace.
CodingWithSpike

4
en ce qui concerne le commentaire ci-dessus, vous ne pouvez pas non plus entrer de nom de base de données et il s'appliquera simplement à votre nom par défaut, j'ai utilisé ci-dessous avec vs2015 et cela a fonctionné: sqllocaldb.exe stop sqllocaldb.exe delete
Deviney

147

Pour ceux qui recherchent encore une solution ...

Accédez à l'Explorateur d'objets View / SQL Server et supprimez la base de données du sous-nœud (localdb) \ v11.0!
entrez la description de l'image ici

Il y a essentiellement une base de données locale conservée où les fichiers devraient être, et si vous souhaitez supprimer les fichiers de base de données, assurez-vous de les supprimer de cet utilitaire d'exploration, pas manuellement.


cela m'a mordu une fois, la deuxième fois, c'était que j'avais des migrations automatiques == false FML
workabyte

8
Aussi, si vous ne le voyez pas. Ajoutez simplement une nouvelle connexion et entrez "(localdb) \ v11.0" (avec Windows Auth). Cela peut paraître simple, mais je regardais mon écran pendant un moment. :)
Peter

@Peter Ok, Ajout de la base de données et maintenant je vois mes 2 contextes. Lorsque je supprime de cette vue, j'obtiens une nouvelle erreur: «impossible de récupérer le niveau d'accès aux données pour cette base de données». J'ai pu contourner ce problème en utilisant l'invite de commande.
nVentimiglia

1
Lorsque vous utilisez la fabrique de connexions par défaut d'EF6, vous utilisez peut-être mssqllocaldb à la place. Changez le serveur en (LocalDb) \ mssqllocaldb et voyez si cela se connecte. Il existe plusieurs versions de LocalDb, et une ne vous montre pas toutes.
Jim Yarbro

Aussi, ce que j'ai vécu: Cliquez sur déconnecter puis reconnectez-vous si vous ne voyez plus votre base de données. (Actualiser n'aide pas)
StefanG

19

J'ai d'abord essayé la solution de JSobell mais je n'ai pas vu ma base de données répertoriée ici. J'ai exécuté les commandes de CodingWithSpike à partir de l'invite de commande VS Developer, mais cela n'a pas fonctionné non plus. Enfin, j'ai exécuté les mêmes commandes de CodingWithSpike à partir de Package Manager Console et cela a fonctionné.

    PM> sqllocaldb.exe stop v11.0
    LocalDB instance "v11.0" stopped.

    PM> 
    PM> sqllocaldb.exe delete v11.0
    LocalDB instance "v11.0" deleted.

    PM> sqllocaldb.exe start v11.0
    LocalDB instance "v11.0" started.

9

Bien.

Ma solution était simple, j'ai changé pour utiliser le serveur local:

J'ai changé l' DataSourceattribut dans la chaîne de connexion de:

Data Source=(LocalDb)\v11.0;blah

À:

Data Source=.\SQLEXPRESS;blah

Une autre solution consiste à vous connecter à LocalDb via SQL Management Studio et à essayer de supprimer cette base de données:

entrez la description de l'image ici

Cependant, cela n'a pas fonctionné pour moi, lorsque j'essaie de le supprimer, il est dit "TITRE: Microsoft SQL Server Management Studio

La base de données '{0}' n'existe pas sur le serveur. (SqlManagerUI)

Lorsque j'essaye de la détacher, la base de données n'apparaît pas dans la liste pour la sélection de détachement, "Mettre hors ligne" m'amène également à l'erreur ci-dessus.

Ce qui m'amène à penser qu'il s'agit d'un bogue solide dans LocalDB.


J'ai des problèmes en essayant d'utiliser la base de données locale avec EF5
Nikos

LocalDB a pour avantage que vous pouvez l'exécuter sous votre compte local sans avoir besoin de privilèges d'administrateur, tout comme IIS Express. Cela permet de partager des projets avec de nombreux développeurs sans configurer IIS ou SQL Server pour chaque utilisateur individuel.
Bart Verkoeijen


2

La réponse la meilleure et la plus simple Je viens de la résoudre maintenant, utilisez simplement le nom du serveur SQL comme source de données, le catalogue initial soit le nom de votre base de données et là vous allez supprimer la ligne mdf


1

Dans mon cas, j'utilise des migrations et dans la configuration, j'ai simplement changé le nom de la classe dataContext et dataContext elle-même (il suffit de renommer), puis réessayez et cela a aidé


1

Pour SQL 2014, veuillez suivre la réponse sélectionnée CodingWithSpike et ce commentaire

En remarque, la v11.0 est spécifique à SQL LocalDB 2012. Si vous utilisez LocalDB 2014, MS l'a renommé MSSqlLocalDb à la place. - CodingWithSpike 29 août 14 à 19:20


Note latérale utile, je rencontre cela en travaillant sur un ancien projet avec VS 2015 Plus d'informations . Il y a également des changements similaires dans VS 2013 de v11.0à ProjectsV12 . Au moins sur ma machine :-).
viser le

0

J'ai eu le même problème et je l'ai résolu en définissant manuellement le dossier «DataDirectory» dans un autre dossier dans mes binaires d'application.

J'ai mis cette ligne dans la méthode Global.asax Application_Start:

AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));

Ma chaîne de connexion est actuellement définie sur ceci:

<connectionStrings>
    <add name="DataContext" connectionString="Data Source=(LocalDb)\v11.0; Initial Catalog=DataContext; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|DataContext.mdf"
  providerName="System.Data.SqlClient" />


Je ne l'ai pas testé, mais cela ne devrait probablement pas fonctionner. car DataDirectoryest déjà défini sur local App_Datapar défaut, donc à moins d'être explicitement modifié auparavant, votre code ne fait rien.
Shimmy Weitzhandler

SI vous choisissez cette approche, ne changez pas le répertoire, changez le nom du fichier MDF. Aussi, voir romiller.com/2013/05/17/…
RickAndMSFT

0

Je pourrais le réparer en renommant le nom DataBase dans ma chaîne de connexion, de l'aspnet- {nombres} par défaut à un nom simple, cela a fonctionné.


0

Connectez-vous à (LocalDb) \ v11.0 à l'aide du studio de gestion de serveur SQL, supprimez la base de données, puis effectuez une mise à jour de la base de données dans la console du gestionnaire de packages.


0

J'ai eu le même problème. J'ai exécuté les commandes suivantes dans la console du gestionnaire de packages et cela a résolu le problème

sqllocaldb.exe stop MSSqlLocalDb

sqllocaldb.exe delete MSSqlLocalDb
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.