Aucune chaîne de connexion nommée “MyEntities” n’a pu être trouvée dans le fichier de configuration de l’application

J’utilise un framework d’entités et ASP.NET MVC 4 pour créer une application

Ma solution est divisée en deux projets.

  • Une bibliothèque de classes comprenant mon fichier de modèle de données (.edmx) et quelques interfaces personnalisées
  • Le projet MVC ‘container’ qui 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 le fichier app.config de la bibliothèque de classes plutôt que dans le projet MVC.

Est-ce que quelqu’un a des suggestions?

Essayez de copier la chaîne de connexions dans le fichier .config du projet MVC.

Vous avez raison, cela se produit car la bibliothèque de classes (où 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.

Si votre projet principal / de démarrage n’a pas de fichier de configuration (comme dans le cas de l’application Console), ajoutez-en un (Projet de démarrage – Ajouter un nouvel élément -> Fichier de configuration de l’application).

Des informations plus pertinentes peuvent être trouvées ici: MetadataException: impossible de charger la ressource de métadonnées spécifiée

assurez-vous de faire votre projet (avec DbContext) en démarrage

sur le projet, cliquez avec le bouton droit de la souris et sélectionnez

OU

Ajoutez au projet qui est défini comme démarrage votre chaîne de connexion dans le fichier app.config (ou web.config)

OU

Appelez la commande comme ceci

Update-Database -Script -ProjectName '' -StartupProjectName '' -ConnectionSsortingng 'data source=.;initial catalog=;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'

Puis réessayez

Vous pouvez simplement passer la chaîne de connexion à EntityFramework et continuer votre vie:

 public partial class UtilityContext : DbContext { static UtilityContext() { Database.SetInitializer(null); } public UtilityContext() : base("Data Source=SERVER;Initial Catalog=DATABASE;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=True") { } // DbSet, OnModelCreating, etc... } 

Comme vous le supposez, il s’agit de la chaîne de connexion figurant dans app.config de la bibliothèque de classes.

Copiez l’entrée de la classe app.config dans le fichier app.config ou web.config du conteneur

Si vous avez plusieurs projets en solution, alors configurez le projet comme démarré là où vous avez votre vérité App.config.

copier la chaîne de connexion dans le fichier app.config ou web.config dans le projet qui a la valeur “Définir comme projet de démarrage” et si vous utilisez la structure d’entité dans la couche de données, installez nuget d’entité dans le projet principal.

Cela se produit également si le projet de démarrage est changé pour celui qui n’a pas les chaînes de connexion .

  1. Clic droit sur la solution – cliquez sur les propriétés
  2. Sous Propriétés communes, sélectionnez le projet de démarrage
  3. Dans le volet de droite, sélectionnez le projet qui a les chaînes de connexion (dans la plupart des cas, ce seront les projets MVC – le projet qui démarre la solution)

Oui, 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é dans la production, mais légèrement modifié ici, donc considéré comme non testé, prêt à aider avec tous les problèmes), où j’ai une variable serverName, une variable databaseName, je les transmets à une méthode et la génère pour moi:

  Dim EfBuilder As New System.Data.EntityClient.EntityConnectionSsortingngBuilder("metadata=res://*/VMware.VmEf.csdl|res://*/VMware.VmEf.ssdl|res://*/VMware.VmEf.msl;provider=System.Data.SqlClient;provider connection ssortingng=""data source=none;initial catalog=none;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""") Dim SqlBuilder As New Data.SqlClient.SqlConnectionSsortingngBuilder(EfBuilder.ProviderConnectionSsortingng) SqlBuilder.DataSource = serverName SqlBuilder.InitialCatalog = databaseName EfBuilder.ProviderConnectionSsortingng = SqlBuilder.ConnectionSsortingng Using vmCtx As New VmEfConn(EfBuilder.ConnectionSsortingng) 

utilisez-vous plusieurs projets sur votre solution?

Parce que si vous le faites, la configuration Web à vérifier est celle du même projet que le fichier de .edmx

  1. Ajouter un fichier App.Config
  2. Définissez le projet comme projet de démarrage.
  3. Assurez-vous d’append les chaînes de connexion après la section entityFramework :

       

Ajouter ConnectionSsortingng au fichier MVC Project Web.config

J’ai fait face au même problème. J’ai manqué de mettre la chaîne de connexion au projet de démarrage car j’effectue une opération d’access aux données à partir d’une autre couche. Aussi, 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 chaîne de connexion générée par le projet contenant le fichier .edmx génère la chaîne de connexion. Il semble que ce soit une sorte de liaison entre les 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.

Cela interrompt le projet Web car il n’y a pas de processus automatique pour append 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 connexions du fichier web.config et de ne pas tenir compte du contenu du fichier de configuration.

La meilleure façon de 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 manière est due au modèle de haut en bas que suivent généralement les fichiers de configuration. La règle de base est que le projet le plus proche du client (application MVC par exemple) est le web.config ou app.config qui sera utilisé.

Assurez-vous d’avoir placé la chaîne de connexion dans ROOT web.config du projet de démarrage.

Je sais que je suis en train de dire l’évidence ici, mais cela m’est arrivé aussi – même si j’avais déjà la chaîne de connexion dans le Web.Config de mon projet MVC (le fichier .edmx était placé dans un autre projet de bibliothèque de classes) Je ne comprends pas pourquoi je continue à avoir une exception … Longue histoire courte, 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. -le-scénario-solution-explorer. Oui, ces choses arrivent aussi aux développeurs vétérans 🙂

Ce problème se produit lorsque vous utilisez des calques dans votre projet et que vous définissez ou installez le travail de entity framework dans DataLayer et essayez d’exécuter votre projet.

Donc, pour résoudre 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 le fichier web.config principal.

J’ai eu 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:

  1. Vous avez besoin de la chaîne de connexion dans le fichier * .config démarré.
  2. Vous devez avoir installé la DLL EntityFramework dans vos références

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, changez-le comme vous le souhaitez, mais apportez les modifications suivantes dans votre classe MyEntities DbContext:

 MyEntities: DbContext { public MyEntities():base("Name-Of-connection-ssortingng-you wish to connect"){ } } 

La raison de cette erreur est que si nous ne spécifions pas le nom de la chaîne de connexion ou la chaîne de connexion dans la classe dérivée de DbConext (dans votre cas, il s’agit de MyEntities), DbContext recherchera automatiquement une chaîne de connexion dans le fichier web.config racine Identique au nom de classe dérivé (dans votre cas, il s’agit de mes entités).

J’ai eu ce problème lors de l’exécution de MSTest. Je ne pouvais pas le faire fonctionner sans le drapeau “de bruit”.

J’espère que cela aide quelqu’un. Cela me coûte beaucoup de temps pour comprendre cela. Tout s’est bien passé de l’IDE. Quelque chose de bizarre au sujet de l’entité Framework dans ce contexte.

Migrations régulières

Il y a deux options – la première que tout le monde a suggéré ici est de s’assurer que la chaîne de connexion se trouve dans le fichier Web.config du projet. Lorsque vous utilisez des chaînes de connexion à partir des parameters d’application Azure, vous devez remplacer vos valeurs Web.config par les valeurs Azure.

Migrations Azure ou automatiques (programmatiques)

Une seconde option est disponible si vous exécutez des migrations par programmation, ce qui vous permet d’exécuter des migrations à l’aide d’une chaîne de connexion obtenue dynamicment (ou via les parameters d’application Azure) sans la stocker dans Web.config:

Lors de la définition de la firebase database TargetDatabase , 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 ne possède pas de nom de fournisseur et que vous utilisez SQL Server / Azure SQL, utilisez “System.Data.SqlClient”.

Ajouter Connectoinstrnig dans le fichier web.config