web-dev-qa-db-fra.com

Entity Framework: le contexte est utilisé en mode Code d'abord avec du code généré à partir d'un fichier EDMX

Je développe une application WPF avec EF 6 base de données première approche, je suis un projet dans mes solutions, si je lance mon projet cette erreur apparaît toujours.

Le contexte est utilisé en mode Code d'abord avec du code généré à partir d'un fichier EDMX pour le développement Base de données ou Modèle d'abord. Cela ne fonctionnera pas correctement. Pour résoudre ce problème, ne supprimez pas la ligne de code qui lève cette exception. Si vous souhaitez utiliser Database First ou Model First, assurez-vous que la chaîne de connexion Entity Framework est incluse dans le fichier app.config ou web.config du projet de démarrage. Si vous créez votre propre DbConnection, assurez-vous qu'il s'agit bien d'un EntityConnection et non d'un autre type de DbConnection, et que vous le transmettez à l'un des constructeurs de base de DbContext qui en prennent un. Pour en savoir plus sur Code First, Database First et Model First, consultez la documentation d'Entity Framework ici: http://go.Microsoft.com/fwlink/?LinkId=394715

13
Munjani375

Mon erreur était d'utiliser la chaîne de connexion standard dans le constructeur

(Server = test\test; Database = DB; User Id = test_user;Password = test), 

mais Entity Framework nécessite un format différent 

(metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string="data source=test\test;initial catalog=DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""" providerName = ""System.Data.EntityClient)

Éditer: Le code modifié doit être formaté en code afin qu'il soit plus facile à lire.

13
Stepan Tripal

EF pose des hypothèses sur la présence ou non d'une section de métadonnées dans la chaîne de connexion. Si vous recevez cette erreur, vous pouvez ajouter la section de métadonnées à la chaîne de connexion dans votre fichier de configuration.

Par exemple. si votre chaîne de connexion ressemble à ceci:

    <add name="MyModel" connectionString="data source=SERVER\INSTANCE;initial catalog=MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

Ajoutez metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl; de manière à ce qu'il ressemble à ceci:

<add name="MyModel" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;data source=SERVER\INSTANCE;initial catalog=MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
9
Daniel de Zwaan

Une chose que vous pouvez faire est ... (si base de données en premier)

Ouvrez le .edmx [Diagramme] -> clic droit -> "Update Model from database"

Et voyez si apparaîtra les onglets "Ajouter", "Actualiser" et "Supprimer".

Si ce n'est pas le cas ... votre connexion est probablement interrompue et la boîte de dialogue pour VS crée une nouvelle chaîne de connexion. =)

3
Rafael Ribeiro

Très tard, mais toujours utile. Je me suis retrouvé coincé dans un problème similaire. A posté une question sur SO et a pu trouver une solution. Vous pouvez vous référer à Erreurs de chaîne de connexion dans C # Web Api . Ma situation était que j'avais deux chaînes de connexion dans web.config (vous saurez pourquoi pourquoi quand vous allez sur le lien). Commenter une chaîne soulevait l'erreur que vous aviez, alors que commenter l'autre chaîne soulevait une erreur comme ci-dessous:

Une erreur s'est produite lors de la tentative de création d'un contrôleur de type 'AccountController'. Assurez-vous que le contrôleur a un constructeur public sans paramètre.

ce que j'ai fait était: J'ai nommé ma première chaîne de connexion comme DefaultConnection et dans le constructeur de la classe ApplicationDbContext, j'ai donné cette DefaultConnection. Maintenant, AccountController utilise cette chaîne de connexion et tous les autres contrôleurs utilisent une deuxième chaîne de connexion. Cela a résolu mon problème.

1
Harry .Naeem

Vous ne devriez pas utiliser la chaîne de connexion générée, vous avez maintenant tous les fichiers de métadonnées inclus dans votre solution. Essayez plutôt d'utiliser la section connection string de app.config

"data source=localhost\sqlexpress; initial catalog=sample; integrated security=True;MultipleActiveResultSets=True;"
1
Mozgovoy Artem

J'ai deux projets:

L'un concerne le fichier EDMX généré et tous les modèles associés.

L'autre est le site Web ASP.NET MVC. 

J'ai rencontré ce problème car la chaîne de connexion que j'utilise sur le projet Web ASP.NET MVC est la chaîne normale que j'utilise à l'aide d'une connexion ADO.NET. Donc ce que j'ai fait est le suivant:

  • Ouvrez le fichier app.config dans les fichiers de votre projet EDMX. 

  • Copiez sa chaîne de connexion.

  • Collez-le sur le projet WEB car il sera utilisé lors du lancement de l'application

0
Willy David Jr

J'ai également été confronté exactement au même message, mais avec un projet Web MVC. Ce message est déclenché lorsque je tente de générer automatiquement le contrôleur à partir du modèle importé. Il semble que cela ne fonctionne pas car "cela a été généré à partir d'un fichier EDMX".

La bonne nouvelle est que cela fonctionne si je génère le modèle basé sur le "Code d'abord" au lieu de "EF Designer". La mauvaise nouvelle est que je ne peux pas utiliser EF Designer si je veux que la génération automatique de contrôleurs fonctionne. Peu importe laquelle de ces deux manières vous générez votre modèle. Une fois le modèle généré, vous l’utilisez de la même manière.

Essaie de supprimer tous vos objets emdx de votre projet et de recréer le modèle basé sur Code First au lieu de EF Designer. Travaillé pour moi!

0
danilocgsilva