web-dev-qa-db-fra.com

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

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

En bref, le problème est qu’après la suppression du fichier .mdf, l’exception suivante est levée lorsque j’essaie d’accéder à la base de données à l’aide de 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 de base de données et maintenant je reçois ce message d'erreur désagréable lors de l'exécution de l'application, qui s'attend à ce qu'il utilise son initializer .

140
Shimmy

Si vous supprimez le fichier de base de données, il reste enregistré auprès de SqlLocalDB. Parfois, il le corrige pour supprimer la base de données. Vous pouvez le faire depuis la ligne de commande.

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

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

220
CodingWithSpike

Pour ceux qui cherchent encore une solution ...

Accédez à Explorateur d'objets View/SQL Server et supprimez la base de données du sous-noeud (localdb)\v11.0!
enter image description here

Il existe essentiellement une base de données locale conservée indiquant l'emplacement des fichiers. Si vous souhaitez supprimer les fichiers de la base de données, veillez à les supprimer de cet utilitaire Explorer, et non manuellement.

146
JSobell

J'ai d'abord essayé la solution de JSobell, mais ma base de données n'y était pas répertoriée. J'ai exécuté les commandes de CodingWithSpike à partir de l'invite de commande de VS Developer, mais cela n'a pas fonctionné non plus. Enfin, j'ai exécuté les mêmes commandes de CodingWithSpike à partir de la console de gestion de package 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.
19
AJs

Bien.

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

J'ai changé l'attribut DataSource dans la chaîne de connexion à partir de:

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

À:

Data Source=.\SQLEXPRESS;blah

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

enter image description here

Toutefois, cela n’a pas fonctionné pour moi. Lorsque je tente de le supprimer, il indique "TITLE: Microsoft SQL Server Management Studio

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

Lorsque j'essaie de la détacher, la base de données n'apparaît pas dans la liste pour la sélection de la détachement. "Déconnecter" m'emporte également à l'erreur ci-dessus.

Ce qui me porte à penser que c'est un bug solide dans LocalDB.

9
Shimmy

La solution la plus simple consiste simplement à modifier le nom de votre base de données dans la chaîne de connexion. Voir le blog de Rowan Millers Comment supprimer une base de données de Visual Studio 2012 pour d'autres solutions. Nous espérons résoudre ce problème dans une prochaine édition.

4
RickAndMSFT

La meilleure et facile réponse que je viens de résoudre maintenant, Il suffit d’utiliser le nom de votre serveur SQL comme source de données, le catalogue initial étant votre nom de base de données et vous supprimez la ligne mdf 

2
gifted

Pour SQL 2014, veuillez suivre la réponse choisie par CodingWithSpike et ce commentaire.

En remarque, la version 11.0 est spécifique à SQL LocalDB 2012. Si vous êtes À l'aide de LocalDB 2014, MS l'a renommé MSSqlLocalDb . – CodingWithSpike 29 août 14 à 19:20

1
The One

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

1
no0bassss

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

sqllocaldb.exe stop MSSqlLocalDb

sqllocaldb.exe delete MSSqlLocalDb
0
Tony Newsom

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 les fichiers binaires de mon application. 

Je mets 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" />

0
Filipe Scur

Je pourrais le réparer en renommant le nom de la base de données dans ma chaîne de connexion, du nom par défaut aspnet- {nombres} à un nom simple, cela fonctionnait.

0
Edgar Salazar

Connectez-vous à (LocalDb)\v11.0 à l'aide de Sql Server Management Studio, supprimez la base de données, puis créez une base de données de mise à jour dans la console du gestionnaire de packages.

0
Nidhin