Problème de chaîne de connexion Entity Framework

c# entity-framework sql

Question

Je crée une petite bibliothèque (DLL) pour gérer les utilisateurs et leurs rôles / privilèges. Le plan consiste à pouvoir ajouter cette dll à un projet MVC et à manipuler des utilisateurs / rôles / etc. Toutes les données résident dans une base de données SQL.

J'utilise un cadre d'entité pour l'accès aux données.

Ainsi, lorsque j'initialise un nouveau RoleManager (c'est le nom de la classe principale de la bibliothèque que je crée), je le fournis avec un objet connectionString comme suit:

RoleManager roleManager = new RoleManager(string connectionString);

Ensuite, dans le constructeur, je fais ceci:

db = new RoleManagerEntities(connectionString); //This is the EntityFramework

Et j'essaie de fournir cette chaîne de connexion (parmi beaucoup d'autres)

"metadata=res://*/RoleManager.csdl|res://*/RoleManager.ssdl|res://*/RoleManager.msl;provider=System.Data.SqlClient;provider connection string='Data Source=localhost;Initial Catalog=Login;Integrated Security=True;Connection Timeout=60; multipleactiveresultsets=true'"

Et j'obtiens l'erreur suivante:

The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.

Cette question résulte de la tentative d'instanciation de l'EF de mon nouveau projet sans fournir de chaîne de connexion et sans que rien ne se trouve dans la configuration de l'application pour qu'il soit par défaut. Dommage que je ne puisse pas le supprimer maintenant.

Réponse acceptée

Copiez simplement les informations de la chaîne de connexion de votre fichier de configuration DLL dans votre fichier de configuration exécutable.


Réponse populaire

En gros, vous essayez d’instancier un ObjectContext via ce constructeur ObjectContext (String) sans transmettre le paramètre string dans le format attendu, c’est le problème.
Voici ce que tu dois faire:

1. Créez d'abord une entrée dans votre "projet de test" app.config car c'est à cet endroit que le CLR cherche pour trouver la chaîne de connexion au moment de l'exécution.

<configuration>
  <connectionStrings>
    <add name="RoleManagerEntities" connectionString="metadata=res:///RoleManager.csdl|res:///RoleManager.ssdl|res://*/RoleManager.msl;provider=System.Data.SqlClient;provider connection string='Data Source=localhost;Initial Catalog=Login;Integrated Security=True;Connection Timeout=60; multipleactiveresultsets=true'" />
  </connectionStrings>
</configuration>

2. Modifiez maintenant le code pour transmettre le nom de la chaîne de connexion à la place de la chaîne de connexion réelle:

db = new RoleManagerEntities("name=RoleManagerEntities");


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow