web-dev-qa-db-fra.com

Erreur dans la commande update-database dans la première migration du code

Je travaille sur une application de bureau dans WPF et je crée SqlRepository avec LocalDB pour stocker des données. J'utilise les outils suivants

  • Communauté Visual Studio 2013 avec la mise à jour 2
  • Entity Framework 6.1.2 pour la première migration du code

J'ai créé une base de données locale avec la configuration du fichier de base de données Microsoft SQL Server (SqlClient). La base de données a été créée avec succès et la chaîne de connexion ci-dessous est extraite de SQL

Data Source=(LocalDB)\v11.0;Initial Catalog=D:\USERS\USERNAME\DOCUMENTS\TestDatabase\testdb.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False

J'utilise la même chaîne de connexion dans app.config. Je peux afficher un objet de base de données dans l'explorateur de bases de données SQL Server dans Visual Studio. Mais lors de l'exécution de la commande update-database dans la console du gestionnaire de paquets Nuget, l'erreur suivante apparaît:

Une erreur liée au réseau ou spécifique à une instance s'est produite pendant que établir une connexion à SQL Server. Le serveur n'a pas été trouvé ou n'était pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions à distance. (fournisseur: SQL Interfaces réseau, erreur: 26 - Erreur lors de la localisation du serveur/de l’instance spécifiée)

20
Nps

J'avais un problème similaire et je l'ai corrigé lorsque j'ai remplacé le "projet de démarrage" d'un autre module par un module contenant des références à tous les autres projets de la solution. Cliquez avec le bouton droit sur le module >> cliquez sur "Définir comme projet de démarrage"

59
user2747855

La réponse de Diego est correcte.

Ce problème se produit lorsqu'il n'y a pas de chaîne de connexion dans le projet marqué en tant que projet de démarrage. Ensuite, EF essaie de se connecter à un moteur de base de données par défaut pour effectuer la mise à jour. Dans mon cas, il a essayé d'utiliser Express et, pour une raison quelconque, il n'a pas pu se connecter. Et l'erreur a été jetée.

Exécutez votre "base de données de mise à jour" avec l'option "-Verbose". Une des lignes indique le projet de démarrage utilisé. Vérifiez votre chaîne de connexion dans ce projet ou remplacez le projet de démarrage par celui qui possède la chaîne de connexion correcte. Cela résout le problème.

7
Mikk

Comme expliqué dans d'autres réponses, le problème provient généralement du mauvais projet initial dans la console du gestionnaire de packages . Dans mon cas, la console ignorait la valeur que j'avais sélectionnée dans la liste déroulante Projet par défaut, ainsi que le paramètre -StartUpProjectName et reproduire le comportement incorrect d'essayer de se connecter à un moteur de base de données par défaut, comme le dit la réponse de Mikk, dans mon cas, en utilisant un moteur SqlExpress.

Mon problème était dû à une configuration de solution incorrecte: si votre solution comporte plusieurs projets et doit être exécutée avec l'option de configuration "Projets de démarrage multiples", mais que vous venez de le télécharger depuis votre référentiel de contrôle de code source, il est possible que le l'option de configuration par défaut "Projet de démarrage unique" est appliquée à la solution (cette valeur de configuration n'est généralement pas archivée dans le contrôle de code source). Dans ce cas, Package Manager Console ignore simplement le projet de démarrage sélectionné dans sa liste déroulante et applique simplement le projet de démarrage par défaut dans la solution, qui peut ne pas comporter de chaîne de connexion, comme spécifié dans la réponse de Mikk.

J'ai donc résolu le problème en modifiant les propriétés de la solution: Common properties/Startup project/Sélectionnez Multiple startup projects au lieu de Single startup project, puis la console du gestionnaire de package accepte le nom du projet et met à jour la base de données appropriée.

3
Diana

Essayez avec ce Connectionstring:

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=D:\USERS\USERNAME\DOCUMENTS\TestDatabase\testdb.MDF;Initial Catalog=testdb;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
2
octavioccl

J'ai pu résoudre ce problème en ajoutant des paramètres à la commande update-database :

update-database -StartupProjectName MyApp.Web -ConnectionStringName MyAppConnectStringInWebConfig
1
Steve Greene

Une erreur liée au réseau ou spécifique à une instance s'est produite pendant que établir une connexion à SQL Server. Le serveur n'a pas été trouvé ou n'était pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions à distance. (fournisseur: SQL Interfaces réseau, erreur: 26 - Erreur lors de la localisation du serveur/de l’instance spécifiée)

Ce message d'erreur vous informe qu'il n'est pas possible de se connecter à SQL Server. Les raisons possibles et leur élimination sont décrites ci-dessous:

1) SQL Server n'est pas démarré. Son démarrage vous permettra de voir votre instance/serveur SQL Server dans la liste déroulante des serveurs SQL disponibles.

  • Allez dans le menu Démarrer -> Panneau de configuration -> Outils d’administration -> Services. 
  • Dans la liste des services, recherchez SQL Server (nom d’instance, par Défaut, c’est EZPARTS5) et vérifiez son état; il doit être démarré.
    (s’il n’est pas démarré, cliquez avec le bouton droit de la souris sur SQL Server et sélectionnez
    Commencez par le menu contextuel).

2) Le pare-feu bloque le port 1433 (port standard MSSQL pour les connexions). Il peut être désactivé en suivant les étapes ci-dessous: 

  • Allez dans le menu Démarrer -> Panneau de configuration -> Outils d’administration -> Services.
  • Rechercher le service de pare-feu, il doit être désactivé (s'il ne l'est pas, cliquez à droite. Cliquez sur le service et sélectionnez Arrêter dans le menu contextuel).

Remarque: vous trouverez plus d'informations à ce sujet sur le site officiel de Microsoft: lien

3) Le protocole TCP/IP est désactivé pour les protocoles MSSQL. Pour l'activer, voir les étapes ci-dessous:

  • Accédez au Gestionnaire de configuration SQL Server dans le menu Démarrer.
  • Spécifiez les paramètres du protocole TCP/IP dans Configuration du serveur SQL. Manager.
  • Redémarrer le PC.

Remarque: vous trouverez plus d'informations à ce sujet sur le site officiel de Microsoft: lien

4) Assurez-vous que votre moteur de base de données est configuré pour accepter les connexions distantes (si vous utilisez une base de données centralisée):

  • Ouvrez SQL Server Management Studio.
  • Cliquez avec le bouton droit de la souris sur Instance SQL Server -> Propriétés -> Connexions -> Cochez la case Autoriser les connexions distantes à ce serveur.
  • Accédez à la section Général et vérifiez le nom du serveur SQL spécifié dans Le champ Nom.

5) Si vous utilisez une instance nommée SQL Server, assurez-vous que vous utilisez ce nom d'instance dans vos chaînes de connexion. Généralement, le format requis pour spécifier le serveur de base de données est machinename\instancename.

6) Assurez-vous que votre compte de connexion dispose des droits d’accès sur la base de données que vous avez utilisée lors de la connexion. Utilisateur SQL sur la base de données en question, et utilisez simplement ces données de connexion nom d'utilisateur/mot de passe pour vous connecter à SQL Server.

Référé à partir de ceci lien

1
Pரதீப்

Si vous essayez de vous connecter à Sql Server au lieu de localdb, assurez-vous que la fabrique de connexions par défaut dans le fichier web.config est la suivante:

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="Data Source=.\SQLEXPRESS2012; Integrated Security=True; MultipleActiveResultSets=True" />
  </parameters>
 </defaultConnectionFactory>
1

J'ai résolu cette erreur en changeant le projet initial en Entity Project. 

Regardez:

Update-Database -Verbose Utilisation du projet de démarrage 'SCVE.Web'. <- this ir error Utilisation du projet NuGet 'SCVE.EntityFramework'.

1
Diego

J'ai eu ce même problème avec un projet ASP.NET fraîchement créé.

J'ai d'abord essayé de définir le projet de démarrage comme mentionné ci-dessus. Aucun projet de démarrage n'a été sélectionné et je n'ai pas pu en sélectionner un.

J'ai finalement mis à jour mon Visual Studio de 2015 Update 1 à 2015 Update 3 et

update-database

exécuté sans problèmes.

0
drsbee