Mot clé non pris en charge: "source de données" initialisant le contexte Entity Framework


161

J'initialise le contexte de l'objet Entity Framework, et cela me donne l'erreur de mot clé non pris en charge:

metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Workspace\vs\Leftouch\Leftouch.Web\Data\Leftouch.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;App=EntityFramework"

J'ai pris la chaîne de connexion directement à partir de web.config qui fonctionnait et je n'ai modifié que le chemin d'accès au fichier (que j'ai défini dynamiquement), et au lieu d'utiliser la valeur par défaut, j'ai utilisé cette chaîne de connexion explicitement. Qu'est-ce qui pourrait causer cette erreur?


2
Veuillez consulter stackoverflow.com/questions/6003085/… pour une approche différente
LCJ

1
Je ne sais pas qui a inventé ça metadata=res:, alors res=somethingelseavec "une syntaxe partout - mais ils devraient être vraiment heureux de ne pas être dans la même pièce que moi en ce moment: - /
Simon_Weaver

2018 Erreur de syntaxe similaire .Net EF Core - providerName n'était pas nécessaire par une chaîne de connexion SqlClient. Pas de guillemets ni de graduations dans la chaîne pour le noyau EF.
Sql Surfer

Réponses:


322

La vraie raison pour laquelle vous obtenez cette erreur est à cause des "valeurs de votre chaîne de connexion.

Si vous les remplacez par des guillemets simples, cela fonctionnera très bien.

https://docs.microsoft.com/archive/blogs/rickandy/explicit-connection-string-for-ef

(Publié pour que les autres puissent obtenir le correctif plus rapidement que moi.)


1
Si vous transmettez la chaîne de connexion à la classe ObjectContent, assurez-vous qu'elle contient des guillemets simples. Si vous obtenez la connexion à partir du fichier .config, vous pouvez utiliser le & quot; séquence d'échappement.
Mike Stonis

C'est ce qui m'a résolu.
GiddyUpHorsey

Pour ceux d'entre vous qui ne sont pas familiers avec le fonctionnement de XML, "est une séquence d'échappement pour un guillemet car il s'agit d'un caractère réservé dans XML.
Vivian River

1
Merci son travail maintenant
Shivam Srivastava

System.Data.EntityClient.EntityConnectionStringBuilder l'a fait pour moi, merci.
AFract

37

J'ai résolu ce problème en EntityClientrevenant à SqlClient, même si j'utilisais Entity Framework.

Ma chaîne de connexion complète était donc au format:

<add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient" />

2
A travaillé pour moi! +1
Yury Kerbitskov

6
Le changement ci-dessus entraînera potentiellement (comme dans mon cas) l'erreur suivante "Le contexte est utilisé en mode Code First avec du code généré à partir d'un fichier EDMX pour le développement de Database First ou Model First"
Psi-Ed

Vous pouvez commenter lancer une nouvelle UnintentionalCodeFirstException () dans OnModelCreating (), mais cela ressemble à une solution de contournement sale
Alexander Ulmaskulov

14

Cela semble manquer le providerName="System.Data.EntityClient"bit. Vous avez tout compris?


Ok, c'était un autre attribut, j'ai oublié celui-là. Ajouté maintenant, il est metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider name=System.Data.EntityClient;provider connection string=&quot;{0};App=EntityFramework&quot;et il dit maintenant clé non trouvée: nom du fournisseur. J'ai aussi essayé providerName=...au lieu de provider name=trop, mais pas de chance.
Can Poyrazoğlu

2
Eh bien, j'ai commencé à le créer en utilisant la EntityConnectionStringBuilderclasse, et bizarrement, cela fonctionne maintenant. Mais je ne sais toujours pas pourquoi il n'acceptait pas ma chaîne, même avec vos ajouts.
Can Poyrazoğlu

3

Croyez-le ou non, renommer LinqPad.exe.config en LinqPad.config a résolu ce problème.


12
C'est Microsoft, tout peut arriver!
Altaf Patel

Cela n'a pas de sens. Qu'est-ce que Linqpad a à voir avec la question et comment renommer un exécutable peut-il être utile?
Gert Arnold

Eh bien, cette erreur particulière s'est produite avec Linqpad dans mon cas et cela l'a résolue. Et je n'ai pas renommé l'exécutable. J'ai renommé le .exe.config en .config.
Sameer Alibhai

Quoi qu'il en soit, c'est un scénario très spécifique. Cela ajoute seulement du bruit car cela n'explique rien,
Gert Arnold


1

Assurez-vous que vous avez Data Sourceet non DataSourcedans votre chaîne de connexion. L'espace est important. Croyez-moi. Je suis un idiot.

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.