-1

Je travaille sur un projet utilisant SQL Server 2008 Express. J'ai eu une instance appelée SQLEXPRESS et je vous connecter à la DB via cette chaîne de connexion:Impossible de se connecter à SQL Server 2016 Developer via une chaîne de connexion générée par le fichier .edmx

<add name="MyConn" connectionString="metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;provider=System.Data.SqlClient; 
provider connection string=&quot;data source=PCNAME\SQLEXPRESS;initial catalog=DbName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Cette chaîne de connexion a été générée par le fichier .edmx (je travaille sur un projet ASP.NET MVC, première base de données, et Entity Framework) et cela a bien fonctionné.

J'ai récemment installé SQL Server 2016 avec une licence de développeur . Pendant le processus d'installation, j'ai utilisé l'instance par défaut, qui est MSSQLSERVER. Pour information, l'ID d'instance généré est MSSQL13.MSSQLSERVER.

J'ai un projet SQL dans ma solution pour régénérer mes tables sur mon nouveau SQL Server; Je pourrais me connecter facilement au serveur via l'assistant. J'ai également utilisé SQL Server Management Studio pour vérifier que tout allait bien sur le serveur, et cela fonctionne parfaitement (les tables sont générées, la connexion était OK).

Cependant, mon code ne parvient pas à se connecter au serveur et systématiquement échoué au premier appel avec error 26 - can't locate server instance

Voici ce que j'ai essayé jusqu'à présent:

  • Modifier le paramètre data source du chaîne de connexion à localhost, ., .\MSSQLSERVER, .\PCNAME, PCNAME.MSSQLSERVER, PCNAME.MSSQL13.MSSQLSERVER, DOMAIN.MSSQLSERVER, DOMAIN\PCNAME => ne fonctionne pas
  • Verify service SQL sont en cours d'exécution => Ils sont
  • Créer un fichier .udp, se connecter à mon serveur et copier/coller la chaîne de connexion générée: Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MyDB;Data Source=PCNAME => ne fonctionne pas
  • Régénérer mon dossier .edmx (et connexion stirng) => ne fonctionne pas
  • Vérifiez this suggestion => Il était déjà correct

Pourquoi est-ce tous les assistants de connexion semble fonctionner (SSMS, fichier .udl, générateur .edmx, mon projet DB), alors que mon code est incapable d'atteindre serveur? Je n'ai changé aucune ligne de code.

EDIT: Ce qui est fou est que j'ai une base de données de journal sur le même serveur, la chaîne de connexion est

<add name="NLogConn" connectionString="Data Source=localhost;initial catalog=DBLOG;integrated security=True" providerName="System.Data.SqlClient" /> 

Et il est en fait l'erreur logging réseau !! Est-ce vraiment une erreur de chaîne de connexion ou une erreur EF? J'utilise la dernière version EF, 6.1.3 sur chaque projet référençant EF (les couches principale et DAL)

Répondre

0

Avant d'aller plus loin dans ce qu'il pourrait être, commençons par une chaîne de connexion fonctionnelle que je viens de tester sur ma machine locale sur Visual Studio 2017 Enterprise avec Entity Framework 6.1.3.

<connectionStrings> 
    <add name="TesterEntities" connectionString="metadata=res://*/Tester.csdl|res://*/Tester.ssdl|res://*/Tester.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Tester;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

La chaîne de connexion balisée est:

=&quot;data source=.;initial catalog=Tester;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot; 

Pour ma connexion test, je me sers de mon serveur local pour une instance par défaut également édition développeur 2016 (. Est une abréviation pour cela). J'utilise la sécurité intégrée et mon nom de base de données (catalogue initial) que je vise est Tester.

Il y a plusieurs choses à prendre en compte si Entity Framework (EF) n'atteint pas correctement une cible.

  1. Quelle version de EF utilisez-vous? Avant que MS ne passe à Core, je crois que la dernière version complète de .NET était 6.1.3. Assurez-vous d'être sur la version la plus récente du téléchargement de Nuget.
  2. Si vous passez d'un SQL Express à un SQL complet, le «fournisseur» de la chaîne de connexion ne sera souvent pas le même que je crois. Ou il peut s'agir de l'instance par défaut locale avant que sql ne soit installé. Assurez-vous de ne pas écraser une chaîne de connexion existante avec ceci. Le fournisseur doit être: 'provider = System.Data.SqlClient'
  3. Vous référencez un projet de EF dans un projet ANOTHER. Chaque projet qui référence EF doit avoir le paquet NuGet pour EF ainsi qu'un fichier de configuration avec la chaîne de connexion. EG: J'ai un projet de console pour tester des choses que j'écris et référence un autre projet appelé 'EF Testing' et je n'ai pas de config d'application avec une chaîne de connexion. Ça ne marchera pas.
+0

1 - J'utilise EF 6.1.3, la dernière version. 2 - Corrigez-moi si je me trompe, mais si j'utilise EF, je suppose que je dois utiliser System.Data.EntityClient en tant que fournisseur? 3 - Chaque projet référençant EF a son propre fichier de configuration (seul mon projet principal et le DAL) et j'ai vérifié partout où la chaîne de connexion était la même. En outre, j'ai apporté une modification à mon message original – user2687153

+0

La chaîne de connexion que vous avez indiquée dans votre exemple n'est pas une chaîne de connexion EF. Vous avez besoin de toutes les métadonnées: 'metadata = res: //*/Tester.csdl..etc' pour montrer que cette chaîne de connexion fait référence aux fichiers générés par EF. – djangojazz

+0

J'ai copié/collé tout le 'metadata = res: //' dans le premier que j'ai donné 'MyConn' (qui ne semble pas fonctionner). L'autre, en effet, n'est pas généré par EF et n'a pas besoin de ces métadonnées. – user2687153