Je viens de créer un contrôle utilisateur. Ce contrôle utilise également ma classe de cadre d'entité statique pour charger deux combogoxes. Tout va bien et fonctionne sans problème. La conception et le temps d'exécution fonctionnent. Ensuite, lorsque j'arrête l'application, tous les formulaires contenant mon UserControl ne fonctionnent plus dans le temps de conception. Je viens de voir deux erreurs:
erreur1: La connexion nommée spécifiée n'est pas trouvée dans la configuration, non destinée à être utilisée avec le fournisseur EntityClient ou non valide. P>
Erreur 2:
La variable Runtime Tout fonctionne toujours p> My Statique EF CLASSIOY CLASSE: P> ccartikelvelvelveldden code> est non déclarée ou n'a jamais été attribuée.
(CCARTIKELVELDE est mon
usercontrol code>) p>
private void LaadCbx()
{
cbxCategorie.DataSource = (from c in BSManagerData.Entities.Categories
select c).ToList();
cbxCategorie.DisplayMember = "Naam";
cbxCategorie.ValueMember = "Id";
}
private void cbxCategorie_SelectedIndexChanged(object sender, EventArgs e)
{
cbxFabrikant.DataSource = from f in BSManagerData.Entities.Fabrikants
where f.Categorie.Id == ((Categorie)cbxCategorie.SelectedItem).Id
select f;
cbxFabrikant.DisplayMember = "Naam";
cbxFabrikant.ValueMember = "Id";
}
3 Réponses :
On dirait que vous êtes en quelque sorte exécutant le code de base de données en mode de conception. Pour éviter cela, recherchez le contrôle et la méthode qui l'entraîne et utilisez:
if (DesignMode) return
Merci pour vos réponses que je suis toutes pour les meilleures pratiques et si vous utilisez la classe statique, c'est une mauvaise pratique, je dois voir comment je devrais le faire d'une autre manière. Le problème est que j'ai eu une erreur il y a quelque temps où je ne pouvais pas modifier un objet dans un autre contexte. J'ai lu sur Stackoverflow que la création d'une classe statique était l'une des solutions. C'est pourquoi je suis allé pour cette approche. Je ne suis pas non plus un grand fan de chaque fois que je dois accéder à la base de données, construisez une déclaration en utilisant mon opération. Je suis nouveau à EF, donc tout conseil constructif est plus bienvenu!
Vient d'essayer ce que vous avez proposé mais toujours pas bon. Maintenant, j'ai procédé à ce qui suit: Void privé LAADCBX () {IF (DESIGNODE) Retourne; cbxcategorie.dataSource = (de C dans bsmanagerdata.enties.Catégories Sélectionnez C) .toliste (); cbxcategorie.displaymember = "naam"; cbxcategorie.valuemembernd = "id"; } Toutefois, lorsque j'essaie d'ajouter le contrôle à mon formulaire, j'obtiens l'erreur suivante: IMG716 .ImagesHack.us / img716 / 6549 / Eferror.png
D'où appelez-vous LAADCBX ()? Si vous l'appelez à partir d'un constructeur, essayez de le supprimer du constructeur de la commande. C'est mieux (pas seulement pour ce problème, mais en général) de faire le moins possible dans le constructeur, notamment non des liaisons DB. Vous devriez être capable d'utiliser un crochet comme surcharge pour charger les données.
Merci pour le conseil que j'ai placé dans l'événement de chargement, car cela semblait en effet un meilleur emplacement. J'ai cependant dû placer la designmode là-bas. Sinon, cela ne fonctionnerait pas. Je ne comprends pas pourquoi ça se plaint. L'app.config n'est-il pas visible pour le USERCONTROL? Pourriez-vous également me donner des conseils concernant la classe Statise EF. Et si j'ai une combinaison sur une forme sur un formulaire où je charge des objets d'un contexte et que je souhaite enregistrer un objet contenant l'objet de la combinaison que j'ai chargé avec un contexte précédent? Comment gérer cela? Détachez-moi? Comment puis-je atteindre le motif de référentiel?
EF utilise l'app.config de l'application actuelle i>. Cela signifie que lorsque vous concevez les commandes dans Visual Studio, cela utilisera devenv.exe.config. La connexion n'est pas répertorie là-bas. En outre, parce que l'accès à la DB peut avoir d'autres effets secondaires (ralentir le concepteur, causer des requêtes DB non désirées), il est préférable de l'éteindre au moment de la conception.
Merci pour l'info que vous pouvez également me donner des conseils sur ma deuxième question dans mon précédent commentaire? Merci
Je n'ai pas la réponse i> à cela, il est probablement préférable de demander à une nouvelle
J'ai fait face au même problème, P>
Dans mon cas, j'ai ajouté des codes de base de données dans l'événement de chargement de contrôle utilisateur qui utilisaient certaines bibliothèques, qui n'étaient pas chargées à l'exécution. P>
Par conséquent, il est conseillé, de ne pas écrire de code de base de données dans l'événement de la charge de contrôle utilisateur. P>
espoir, cela vous aide! p>
Merci mec! Je viens de passer 3 heures, essayant de comprendre ce que je fais mal. J'essayais de recréer un modèle d'entité, créé quelques solutions de test ... et la réponse était simple: ne pas écrire un code de base de données dans l'événement de contrôle de l'utilisateur!
Cette erreur montre si vous appelez la fonction "LAADCBX ()" sur constructeur de USERCONTROL. P>
Parce que l'initialisation du cadre d'entité existe dans cette fonction. P>
La solution consiste à appeler cette fonction "LAADCBX ()" dans le constructeur de la forme parent. p>
J'ai arrêté de lire dès que je lisais les mots "classe de cadre d'entité statique". Arrêter de faire ça. À présent. Le
ObjectContext code> n'est pas conçu pour être utilisé de cette façon.