Entity Framework : données du modèle introuvables dans la base - quezaco ?
-
dimanche 6 mai 2012 16:46
Bonjour tout le monde,
J'ai trouvé un "Absolute Beginner's Guide to Entity Framework", ce qui convenait bien à ce que je cherchais.
http://blogs.msdn.com/b/adonet/archive/2010/07/19/absolue-beginners-guide-to-entity-framework.aspx
Il me semble avoir fait ce qui est indiqué là, plus l'installation de Csharp Express 2010 (j'avais Visual Web Developper 2010, qui ne convenait pas pour une application console ou Windows Forms, un fil précédent dans le forum m'a bien fait prendre conscience de la portée de chacun des deux produits).
Comme VWD avait le SP1 il a fallu que le SP1 soit installé aussi sur CSE, avec les mises à jour automatiques parce que dans le programme d'installation proposé du SP1 VS10 il manque cinq fichiers d'extension msi, donc logiquement ça se termine par un échec. Heureusement avec la mise à jour automatique ça se passe bien semble-t-il.
Bon alors je peux dérouler le processus présenté dans le lien ci-dessus, seulement, après avoir généré la base, à partir d'un modèle qui comporte les entités Users et Events et deux associations entre les deux, je me retrouve avec une base sans aucune table. Si c'est normal, ça signife que je n'ai pas bien compris à quoi sert Entity Framework. De fait je ne peux pas exécuter la fin de l'exercice, celle qui consiste à écrire et exécuter du code avec connexion à la base.
Je crée une table Test dans la base à partir de l'explorateur de bases de données (c'est donc la seule table que j'y vois). Je génère un nouveau modèle à partir de la base : surprise, il comporte Users et Events ainsi que les associations entre eux, mais je cherche en vain le mot Test dans le DDL (fichier d'extension SQLCE).
On dirait que j'ai mélangé des trucs ?
En lisant les explications, je m'attendais à trouver dans la base de données générée, une table Users, une table Events, et les tables représentant les associations en fonction des cardinalités (ou des pluralités, dit-on plutôt dans un modèle Entity Framework ?)
Comme je viens de le dire, ce n'est pas ça du tout que j'ai obtenu, ce qui génère rapidement une exception à l'exécution du code.
De même si je crée dans l'explorateur de bases de données une base avec une table Test, je m'attends après avoir généré un modèle à partir de cette base à y trouver une entité Test. Or, ce n'est pas le cas non plus.
- Modifié Gloops dimanche 6 mai 2012 16:51 orthographe
Toutes les réponses
-
mardi 8 mai 2012 10:35Propriétaire
Bonjour,
Désolé mais j’ai parcouru le tuto et tout marche bien pour moi, donc je ne sais pas d’où vient votre problème. Est-ce que vous avez plusieurs instances de SQL Server installées ? Dans l’affirmative, vérifiez svp que vous utilisez les même infos pour se connecter dans le deux cas : c’est la seule explication plausible, vu que les 2 tables sont créés et reconnues.
Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
-
mardi 8 mai 2012 18:43
J'ai installé SQL Express 2008 R2 with Extended Services en une fois.
L'outil "SQL Server Error and Usage reporting" présente trois lignes :
- "Toutes les instances", "Autres*"
- "SQLEXPRESS", "Reporting Services"
- "SQLEXPRESS", "Moteur de base de données SQL"
Remarque en bas de tableau :
* Les autres incluent notamment Notification Services, Integration Services, Replication, SQLBrowser et autres composants partagés.
Dans une autre colonne, pour chaque ligne un répertoire où enregistrer les erreurs.
La base créée par Entity Framework est un fichier d'extension sdf dans le répertoire de documents de l'administrateur.
Est-ce que ça répond à la question ?
- Modifié Gloops mercredi 9 mai 2012 22:15 faute de frappe sur instances
-
mercredi 9 mai 2012 13:57Propriétaire
Bonjour,
Malheureusement, je ne peux pas reproduire l’erreur… tout fonctionne comme décrit dans le tuto avec une base SQL Server et SQL CE : après exécuter le code SQL, j’analyse les bases de données dans SQL Server Management Studio et les tables et les relations sont là. Donc, je ne sais pas qu’est-ce qu’il se passe exactement sur votre ordinateur, mais évidemment ce n’est pas le comportement normale. Essayez refaire tout dans un projet vierge : peut-être l’erreur disparaitra.
Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
-
mercredi 9 mai 2012 22:07
Bonjour,
Bon, puisque semble-t-il je n'ai qu'une instance SQL Server on va laisser cette piste, il semble qu'il ne faille pas exclure un problème d'installation. D'ailleurs, il y a effectivement eu quelques messages d'erreur un peu touffus.
Histoire de simplifier j'ai fait une restauration système le plus loin que j'ai pu, début Mars, puis j'ai réinstallé CSexpress, en prenant soin de désactiver tous les logiciels de protection. Pas de message d'erreur cette fois.
Je me suis retrouvé avec une quarantaine de mises à jour à faire, en quatre vagues dont trois pour le SP1 de Visual Studio (qui a fini par passer quand il était tout seul dans la vague).
Seulement, j'en suis toujours au même point.
Première chose, j'imagine que c'est normal d'avoir une erreur 11007 pour chaque entité et une 11008 pour chaque association, pas de mappage réalisé, tant que la base n'est pas créée.
Doc de l'erreur : http://msdn.microsoft.com/en-us/library/bb738478.aspx
Alors j'ai fait un clic droit sur le modèle, "Générer la base de données à partir du modèle", et j'ai obtenu l'écran ci-dessous. En fait non, j'avais une base de données qui portait le même nom que le projet, dans le répertoire de documents de l'administrateur, et puis histoire de voir si ça change quelque chose j'ai ajouté une base de données, de la même manière qu'en début de développement j'ai ajouté un modèle. Elle s'est donc appelée Database1.sdf et s'est trouvée dans un des répertoires du projet.
Si j'ai bien compris, quand je vais avoir cliqué sur Terminer, puis validé les deux boîtes de messages qui apparaissent ensuite, je dois voir dans l'explorateur de bases de données, à gauche, les mêmes tables que dans l'explorateur de modèles, à droite.
Or, non, quand je clique sur Terminer et que je valide les deux messages, l'explorateur de bases de données ne bouge pas d'un iota.
Est-ce qu'avec la copie d'écran quelque chose devient plus clair ?
Il est peut-être utile de préciser que j'ai pris soin de revenir en arrière dans l'assistant de génération de base de données pour vérifier quelle base je m'apprête à générer.
- Modifié Gloops mercredi 9 mai 2012 22:46
-
mercredi 9 mai 2012 22:35
A moins que la copie d'écran ci-dessus permette de mettre en lumière une incompréhension de ma part, j'imagine qu'il va falloir creuser un peu plus les détails de l'installation.
D'ailleurs, la première fois, je me rappelle que le programme d'installation a proposé six éléments à installer, que lorsque j'ai vu un fonctionnement surprenant j'ai voulu tout désinstaller, mais je ne me suis remémoré que trois éléments sur les six. C'est ce qui a motivé mon retour en arrière par la restauration système, il semble que ça n'était pas forcément un choix heureux, puisque malgré ce retour arrière, le programme d'installation ne me propose plus que cinq éléments à installer.
Les voici :
De ce qu'il me semble le déroulement du projet est une succession de plusieurs phases, chacune confiée à un composant différent. La plupart se déroulent correctement, une d'elles pose problème.
Apparemment, j'ai négligé la désinstallation d'un des composants installés par le programme, mais la seule chose que je suis capable de me rappeler c'est qu'il n'y a pas le compte, on en installe cinq alors que la première fois il y en avait six.
Il n'y a certes pas de certitude que ce sixième élément soit celui qui est mal installé, mais semble-t-il il ne serait pas absurde de vérifier. Un premier point serait déjà de me rappeler son nom.
-
jeudi 10 mai 2012 09:54Propriétaire
Bonjour,
Oui, j’ai le même souci avec l’explorateur des données, mais avec un clic droit sur la base de données vous pouvez la mettre à jour et puis les tables seront là. Avez-vous fait cette action ?
Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
-
jeudi 10 mai 2012 12:03
[Clic droit, Actualiser]
Bonjour,
Oui, j'ai fait ça, depuis l'explorateur de bases de données, puis depuis la base, dedans, et enfin depuis le nœud Tables. J'ai aussi cliqué sur l'icône Actualiser, en haut.
Ce qui m'a encouragé au départ à ouvrir l'explorateur de données a été l'exception, dans le code, me faisant savoir que la table Users n'avait pas été trouvée.
Par ailleurs, j'imagine qu'il doit y avoir quelque chose à installer explicitement pour qu'une base définie dans un fichier d'extension sdf puisse être ouverte dans SSMS ?
Là semble-t-il je peux joindre un fichier d'extension mdf, mais pas sdf. Pour celui-ci, je n'ai, à ma connaissance, que l'explorateur de bases de données de Visual Csharp Express.
-
vendredi 11 mai 2012 10:59Propriétaire
Bonjour,
Bon… il semble d’être un bug en Visual Studio. J’ai créé un projet nouveau et les tables et puis j’ai essayé à créer la base de données à partir de ce modèle.
Tout va bien pour une base SQL Server le fichier .sql généré vérifie tout d’abord si la table existe via :
IF OBJECT_ID(N'[dbo].[NomTable]', 'U') IS NOT NULL
DROP TABLE [dbo].[NomTable];
GO
et dans l’affirmative la table est supprimée et puis recréée.
Par contre, dans le fichier .sqlce nécessaire pour la base de données SQL CE on a :
DROP TABLE [NomTable];
GO
ce qu’il signifie que si la table n’existe pas l’exécution du fichier avec le code SQL finira avec quelques messages d’erreur, mais on va créer les tables. Mais, cela n’explique pas pourquoi vous ne verrez pas les tables après l’actualisation dans l’explorateur.
Finalement, vous pouvez ouvrir une base SQL CE via SSMS (voir cette discussion, par exemple).
Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
-
vendredi 11 mai 2012 12:30
Effectivement, grâce à la discussion sur Stackoverflow, j'ai pu ouvrir les deux types de bases dans SSMS (même si j'aurais bien des suggestions sur la boîte de dialogue d'ouverture), après les avoir créées à partir du même modèle.
Dans le cas de la base mdf ("moteur de base de données"), la suppression des tables est effectivement conditionnelle dans la requête de création de la base.
En revanche, dans les deux bases je ne vois que les tables système.
Aurais-je loupé autre chose ?
-
lundi 14 mai 2012 09:01
Bonjour,
A propos je réalise une chose.
Depuis CS Express 10 j'ai pu ouvrir un fichier sdf, un fichier mdf, et il y a encore un troisième pilote, pour une base Access.
Un atelier fournit directement la requête pour créer une base depuis SSMS, bon ça ça marche. D'ailleurs, à défaut d'une création effective depuis Entity Framework on pourrait toujours faire la même chose avec la requête de création obtenue, bien que ça soit moins pratique que ce qui était annoncé.
Mais après, quand je veux ouvrir la base depuis CS Express, ça coince. Il veut bien ouvrir un fichier mdf, mais pas une base définie sur le serveur depuis SSMS. Dans Visual Studio 2005 oui ça marche, mais c'est pour monter une application Entity Framework que je risque d'avoir un problème.
Est-ce que je dois installer un pilote séparément, pour accéder au serveur SQL Express 2008 depuis CS Express 10 ?
- Modifié Gloops lundi 14 mai 2012 09:02
-
lundi 14 mai 2012 13:14Propriétaire
Bonjour,
J’ai analysé les problèmes que vous avez décrits, mais je n’ai pas réussi à identifier les mêmes soucis quand j’ai essayé reproduire ces erreurs. Tout ça me fait penser que votre instance de Visual C# Express ne fonctionne pas correctement. En cette situation je ne peux pas faire autre chose que vous recommander soit réinstaller Visual Studio, soit tout le système si la problème persiste. Je ne crois pas qu’on parle d’un bug (sauf la petit observation concernant la tentative de supprimer les tables avant les créer), vu que ce comportement n’a jamais été rapporté par autres utilisateurs. Merci de votre compréhension !
Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
-
lundi 14 mai 2012 13:22
Est-ce que normalement je devrais avoir le pilote pour accéder aux bases sur le serveur ?
J'imagine qu'il doit y avoir moyen de l'installer à part ? De la même manière que si on veut accéder à une base Oracle ou MySql on installe un pilote adapté ?
Ou je dois vraiment refaire toute l'installation ?
Comme un bon dessin vaut souvent mieux qu'un long discours ... Sur la même machine, j'ai Visual Web Developper 10 Express, et Csharp 10 Express. Dans le premier, quand je veux me connecter à une base, m'est demandé ainsi d'en sélectionner le type :
Il apparaît clairement que la ligne "Fichier de base de données Microsoft SQL Server" permettra d'ouvrir un fichier d'extension mdf, alors que la ligne suivante, "Microsoft SQL Server", permettra d'ouvrir une base sur le serveur, qui aura par exemble été créée sous SS Management Studio.
Sous Csharp Express, la sélection du type de base de données apparaît ainsi :
et là, je n'ai que les lignes qui permettent de sélectionner un fichier.
Est-ce que l'autre pilote ne pourrait pas se déclarer a posteriori pour Csharp Express ?
Après, effectivement, pour la création des tables, probablement je serais obligé de changer de fenêtre, mais quand il ne resterait plus que ça ...
- Modifié Gloops lundi 14 mai 2012 13:58
-
lundi 14 mai 2012 17:06
A moins que la copie d'écran ci-dessus permette de mettre en lumière une incompréhension de ma part, j'imagine qu'il va falloir creuser un peu plus les détails de l'installation.
D'ailleurs, la première fois, je me rappelle que le programme d'installation a proposé six éléments à installer, que lorsque j'ai vu un fonctionnement surprenant j'ai voulu tout désinstaller, mais je ne me suis remémoré que trois éléments sur les six. C'est ce qui a motivé mon retour en arrière par la restauration système, il semble que ça n'était pas forcément un choix heureux, puisque malgré ce retour arrière, le programme d'installation ne me propose plus que cinq éléments à installer.
Les voici :
De ce qu'il me semble le déroulement du projet est une succession de plusieurs phases, chacune confiée à un composant différent. La plupart se déroulent correctement, une d'elles pose problème.
Apparemment, j'ai négligé la désinstallation d'un des composants installés par le programme, mais la seule chose que je suis capable de me rappeler c'est qu'il n'y a pas le compte, on en installe cinq alors que la première fois il y en avait six.
Il n'y a certes pas de certitude que ce sixième élément soit celui qui est mal installé, mais semble-t-il il ne serait pas absurde de vérifier. Un premier point serait déjà de me rappeler son nom.
La solution de réinstaller le produit ayant été évoquée de façon très précise, quelqu'un serait-il en mesure de m'indiquer quelle est la sixième ligne à supprimer dans la boîte de dialogue "Ajout/suppression de programmes" ?
Je soupçonne que le moment venu ça pourrait bien aider.
-
lundi 30 juillet 2012 10:31
Bonjour,
A partir de l'assistant Génération, vous faites Terminer.
Le code SQL se crée dans un fichier sql et s'affiche dans la fenêtre principale.
Pour créer les tables dans la base de données il "suffit alors" (encore faut-il le savoir, j'ai mis du temps aussi à le comprendre) de cliquer droit dans le texte, se connecter à la base, puis exécuter le code.
On peut aussi exécuter le code depuis le Management Studio. Dans ce cas il faut quand même s'assurer de travailler avec la bonne chaîne de connexion...
Espérant que cela vous aide (bien que le sujet date un peu).
- Modifié Everdeen lundi 30 juillet 2012 10:33
-
lundi 30 juillet 2012 20:58
Je crois me rappeler que ça correspond à ce que je faisais, mais qu'il avait dû y avoir un loupé dans la config. Un peu pour ça que j'essayais de savoir quelles lignes sélectionner dans "Ajout-Suppression de programmes". Mais ... c'est humain, on se contente de valider OK en bas, personne ne note quelles sont les éléments installés.
Espérant que cela vous aide (bien que le sujet date un peu).
Ben ... En fait, pas tant que ça : je savais depuis un moment que j'avais une réinstallation complète à faire, mais que ça n'allait pas se faire en cinq minutes. Et puis, une panne de ligne téléphonique m'a obligé à sortir la clef 3G, qui se reposait sur une config hors d'usage, donc il a fallu remettre ça d'aplomb en accéléré : quasiment deux semaines sans dormir. Je disais déjà des bêtises avant, méfiance.
Maintenant que la 3G fonctionne, SuperExec a retrouvé sa jeunesse, quelques autres bricoles aussi.
Encore réactiver l'antivirus un petit coup, depuis que la synchronisation d'heure s'est pris un coup et que j'ai restauré le système pour la refaire fonctionner ... Et ensuite, il faut que je prévoie une période pour me remettre en service moi-même (sinon gare au PEBKAC), puis sauvegarde de l'image du disque, et je me relancerai à installer l'environnement de développement .Net 4.
D'ailleurs, à ce que je me rappelle, on a affaire à un outil qui fait à la fois le téléchargement et l'installation, et si le pare-feu est actif pendant l'installation ça plante. C'est écrit par Ubu ou c'est moi qui me suis trompé quelque part ?
Après avoir restauré une image de disque d'il y a un peu plus d'un an j'ai désactivé tous les logiciels de protection : ça ne craignait pas puisqu'il n'y avait pas d'Internet. Alors après quelques autres bricoles, aussi, qui font mauvais ménage avec le pare-feu pendant l'installation, j'ai essayé d'installer CSharp Express, comme ça je savais que je n'étais pas embêté par le pare-feu : pas moyen, ça commence par le téléchargement.
Bon, alors si je comprends bien, pendant le téléchargement il faut être avec le curseur de souris sur le bouton de désactivation du pare-feu, et dès que la case d'installation fait un clin d'œil, cliquer ?
Si c'est ça j'imagine qu'il faut contacter le support du pare-feu, avant, pour s'assurer qu'on sait faire ça rapidement.
J'espère que j'ai mal compris.


