J'utilise le framework d'entité et ASP.NET MVC 4 pour créer une application
Ma solution est divisée en deux projets;
- Une bibliothèque de classes qui inclut mon fichier de modèle de données (.edmx) et quelques interfaces personnalisées
- Le projet MVC «conteneur» qui fait référence à la bibliothèque de classes ci-dessus
Mon problème est que lorsque j'essaie d'utiliser le DbContext ' MyEntites ' j'obtiens l'erreur suivante:
Aucune chaîne de connexion nommée «MyEntities» n'a pu être trouvée dans le fichier de configuration de l'application.
Je suppose que le problème a quelque chose à voir avec le fait que la chaîne de connexion se trouve dans l'app.config de la bibliothèque de classes plutôt que dans le projet MVC.
Est-ce que quelqu'un a des suggestions?
PM> Update-Database -Verbose Using StartUp project 'xxxxx.Web.Home'. Using NuGet project 'xxxxx.Web.Home.Dal'. Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Target database is: 'MovieDatabase-0.0.2' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
Réponses:
Essayez de copier la chaîne de connexions dans le fichier .config dans le projet MVC.
la source
Vous avez raison, cela se produit car la bibliothèque de classes (où se trouve le fichier .edmx) n'est pas votre projet de démarrage / principal.
Vous devrez copier la chaîne de connexion dans le fichier de configuration du projet principal.
Dans le cas où votre projet de démarrage / principal n'a pas de fichier de configuration (comme c'était le cas dans mon cas d'application de console), ajoutez-en un (projet de démarrage - Ajouter un nouvel élément -> Fichier de configuration d'application).
Plus d'informations pertinentes peuvent être trouvées ici: MetadataException: impossible de charger la ressource de métadonnées spécifiée
la source
assurez-vous que vous faites votre projet (avec le DbContext) comme démarrage
OU
Ajoutez au projet défini comme démarrage votre chaîne de connexion dans app.config (ou web.config)
OU
Appelez la commande comme ceci
Update-Database -Script -ProjectName '<project name>' -StartupProjectName '<project name>' -ConnectionString 'data source=.;initial catalog=<db name>;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'
Puis réessayez
la source
Set as Startup Project
- comme le montre la capture d'écran ci-dessus. (même si vous touchez F5, vous ne pourrez pas démarrer la bibliothèque de classes)Vous pouvez simplement passer la chaîne de connexion à
EntityFramework
et continuer votre vie:la source
Comme vous le supposez, cela concerne la chaîne de connexion se trouvant dans app.config de la bibliothèque de classes.
Copiez l'entrée de la classe app.config dans le conteneur
app.config
ou leweb.config
fichierla source
Si vous avez plusieurs projets en solution, configurez le projet comme démarré là où vous avez votre vérité App.config.
la source
copiez la chaîne de connexion
app.config
ou leweb.config
fichier dans le projet qui a été défini sur "Définir commeStartUp
projet" et si dans le cas de l'utilisation du framework d'entité dans le projet de couche de données - veuillez installer le nuget du framework d'entité dans le projet principal.la source
Cela se produit également si le projet de démarrage est remplacé par celui qui n'a pas les chaînes de connexion .
la source
Assurez-vous d'ajouter les chaînes de connexion après la
entityFramework
section:la source
Ouais, c'est idiot. Vous pouvez éviter de copier la chaîne de connexion en utilisant un générateur de connexion. Code VB.Net (utilisé en production, mais légèrement modifié ici, alors traitez comme non testé, heureux de vous aider en cas de problème), où j'ai une variable serverName, une variable databaseName, je les passe dans une méthode et je fais générer la connexion pour moi:
la source
utilisez-vous plus d'un projet sur votre solution?
Parce que si vous l'êtes, la configuration Web que vous devez vérifier est celle du même projet que le fichier de .edmx
la source
Ajouter ConnectionString au fichier Web.config du projet MVC
la source
J'ai rencontré ce problème lorsque j'utilise plusieurs projets, le projet de démarrage avec web.config et app.config pour le projet EntityFramework.
pour éviter ce problème, vous devez:
la source
J'ai fait face au même problème. J'ai manqué de mettre une chaîne de connexion au projet de démarrage alors que j'effectue une opération d'accès aux données à partir d'une autre couche. également si vous n'avez pas app.config dans votre projet de démarrage, ajoutez le fichier app.config, puis ajoutez une chaîne de connexion à ce fichier de configuration.
la source
J'ai obtenu cela en n'ayant pas le projet défini comme démarrage, comme indiqué par une autre réponse. Ma contribution à cela - lorsque vous effectuez Add-Migrations et Update-Database, spécifiez le projet de démarrage dans le cadre de la commande dans Nuget Package Manager Console (n'incluez pas les caractères '[' ou ']', c'est juste pour vous montrer que vous besoin de changer le texte qui s'y trouve en nom de votre projet):
Ça devrait le faire.
la source
C'est parce que votre classe de contexte est héritée de DbContext. Je suppose que votre ctor est comme ça:
name=...
doit être remplacé par le nom de votre connectionStringla source
La chaîne de connexion générée par le projet contenant le fichier .edmx génère la chaîne de connexion, il semblerait que ce soit un résidu des types de fichiers app.config qui ont été copiés dans le répertoire de sortie et référencés par l'exécutable pour stocker les informations de configuration d'exécution.
Cela interrompt le projet Web car il n'y a pas de processus automatique pour ajouter des informations .config aléatoires dans le fichier web.config du projet Web.
Le plus simple est de copier la chaîne de connexion du fichier de configuration dans la section des connexions du fichier web.config et d'ignorer le contenu du fichier de configuration.
la source
La meilleure façon que je viens de trouver pour résoudre ce problème est de définir temporairement ce projet (probablement une bibliothèque de classes) sur le projet de démarrage. Cela force la console du gestionnaire de packages à utiliser ce projet comme source de configuration. une partie de la raison pour laquelle il est configuré de cette façon est due au modèle descendant que les fichiers econfig suivent généralement. La règle générale est que le projet le plus proche du client (application MVC par exemple) est le web.config ou app.config qui sera utilisé.
la source
Assurez-vous que vous avez placé la chaîne de connexion dans le ROOT web.config du projet de démarrage.
Je sais que je dis un peu l'évidence ici, mais cela m'est aussi arrivé - même si j'avais déjà la chaîne de connexion dans le Web.Config de mon projet MVC (le fichier .edmx a été placé dans un projet de bibliothèque de classe différent) et je ne pouvais pas ne sais pas pourquoi je continue à recevoir une exception ... Bref, j'ai copié la chaîne de connexion dans Views \ Web.Config par erreur, dans une étrange combinaison de fatigue et de non-défilement vers le bas de -le scénario de l'explorateur de solutions. Oui, ces choses arrivent aussi aux développeurs vétérans :)
la source
Ce problème se produit lorsque vous utilisez des couches dans votre projet et que vous définissez ou installez le travail de trame d'entité dans DataLayer et essayez d'exécuter votre projet
Donc, pour surmonter ce problème, copiez la chaîne de connexion à partir de la couche où se trouve le fichier Edmx et collez la chaîne de connexion dans web.config principal.
la source
Ajoutez une chaîne de connexion dans le fichier web.config racine du projet MVC «conteneur» qui référence la bibliothèque de classes comme suit:
Si vous ne souhaitez pas utiliser "MyEntities" comme nom de connexion, modifiez-le comme vous le souhaitez, mais apportez la modification suivante dans votre classe MyEntities DbContext:
La raison de cette erreur est la suivante: si nous ne spécifions pas le nom de la chaîne de connexion ou connectons la chaîne dans la classe dérivée de DbConext (dans votre cas, il s'agit de MyEntities), alors DbContext recherchera automatiquement une chaîne de connexion dans le fichier racine web.config. Identique au nom de classe dérivé (dans votre cas, il s'agit de Mes entités).
la source
J'ai eu ce problème lors de l'exécution de MSTest. Je ne pourrais pas le faire fonctionner sans le drapeau "noisolation".
J'espère que cela aide quelqu'un. Cela m'a coûté beaucoup de temps pour comprendre cela. Tout allait bien de l'IDE. Quelque chose de bizarre sur Entity Framework dans ce contexte.
la source
Migrations régulières
Il y a deux options - la première que tout le monde a suggérée ici est de s'assurer que la chaîne de connexion se trouve dans le fichier Web.config du projet. Lorsque vous travaillez avec des chaînes de connexion à partir des paramètres d'application Azure, cela signifie remplacer vos valeurs Web.config par les valeurs Azure.
Azure ou migrations automatiques (programmatique)
Il existe une deuxième option disponible si vous exécutez des migrations par programme, qui vous permet d'exécuter des migrations à l'aide d'une chaîne de connexion obtenue dynamiquement (ou via les paramètres d'application Azure) sans la stocker dans Web.config:
Lors de la définition de TargetDatabase de la configuration , utilisez le constructeur DbConnectionInfo qui prend une chaîne de connexion et un nom de fournisseur au lieu du constructeur qui ne prend qu'un nom de connexion. Si votre chaîne de connexion n'a pas de nom de fournisseur et que vous utilisez SQL Server / Azure SQL, utilisez "System.Data.SqlClient"
la source
Cela peut également entraîner un nombre insuffisant de références dll référencées dans le code appelant. Un petit hack maladroit pourrait vous sauver la journée.
Je suivais l'approche DB First et j'avais créé le fichier EDMX dans le projet de bibliothèque de classe DAL, et cela faisait référence à la bibliothèque de classe BAL, qui à son tour était référencée par un service WCF.
Depuis que j'obtenais cette erreur dans le BAL, j'avais essayé la méthode mentionnée ci-dessus pour copier les détails de la configuration depuis l'App.config du projet DAL, mais je n'ai pas résolu. En fin de compte avec la pointe d'un ami, je viens d'ajouter un fichier EDMX factice au projet WCF (avec la connectivité DB pertinente, etc.), il a donc importé tout le nécessaire, puis j'ai simplement supprimé le fichier EDMX, et il s'est juste débarrassé du problème avec une construction propre.
la source
Il y a un commentaire sur la première réponse de @RyanMann qui suggère:
Ceci est une suggestion fantastique!
Il fonctionne également pour partager des chaînes de connexion entre les fichiers App.config et Web.config!
Quiconque souhaite suivre cette suggestion doit se diriger vers cette réponse SO . Il contient un excellent guide étape par étape sur le partage de chaînes de connexion entre plusieurs projets dans une solution.
La seule mise en garde est qu'il
configSource
doit exister dans le même répertoire ou un sous-répertoire. Le lien ci-dessus explique comment utiliser "Ajouter en tant que lien" pour contourner ce problème.la source
J'ai eu cette erreur lors de la tentative d'utilisation d'EF dans un plugin AutoCAD. Les plug-ins CAO obtiennent la chaîne de connexion à partir du fichier acad.exe.config. Ajoutez la chaîne de connexion comme mentionné ci-dessus au fichier de configuration acad et cela fonctionne.
Nous remercions Norman.Yuan d'ADN.Network.
la source
Si vous utilisez un modèle MVVM, essayez de copier les chaînes de connexion dans toutes les parties de votre projet.
Par exemple, si votre solution contient deux projets, le projet de bibliothèque de classes et le projet wpf, vous devez copier les chaînes de connexion du projet principal (projet de classe de bibliothèque) et en placer une copie dans le fichier App.config du projet wpf.
J'espère que cela vous sera utile :)
la source
Ajouter Connectoinstrnig dans le fichier web.config
la source