none
MVC et Entity Framework, révision RRS feed

  • Question

  • Bonjour tout le monde,

    Voici quelque temps que je n'ai plus programmé sous MVC, alors j'ai décidé de m'y remettre. En plus ça fait une occasion de réviser Entity Framework en même temps, tant mieux.

    Comme c'est la programmation qui me paraît intéressante plus que l'installation je commence par partir de ce que j'ai :

    • Visual Web Developer 2010 Express
    • .Net 4.0.30319.1 (j'ai lu le numéro de version dans le fichier System.Data.Entity)
    • MVC2

    Le tout sur Windows XP Home SP3.

    Pour relire la procédure j'ai suivi les liens sur asp.net/mvc, aussi je me suis retrouvé sur quelque chose qui concerne la dernière version, la 5. ça suppose un peu de gymnastique pour adapter en cours de route, par exemple le chemin pour stocker les chemins par défaut n'est pas le même.

    Je m'en suis sorti jusqu'au moment où il a été question de créer une base sous Entity Framework, le type DbContext n'est pas reconnu. En fait, je m'aperçois qu'Intellisense, lorsque je tape System.Data me propose Entity, et ensuite lorsque j'ajoute un point, plus rien. Même si j'ajoute la DLL dans le répertoire bin du site.

    Est-ce moi qui ai mal compris quelque chose, ou ça laisse entendre que je dois réinstaller Entity Framework ?

    (pas impossible, je suis parti d'une image de disque de l'année dernière, et ça me rappelle des choses ...)

    Je crois me rappeler qu'il vaut mieux éviter de faire ça dans n'importe quel ordre ?

    Histoire de travailler avec une procédure adaptée à ce que j'ai d'installé, et comme j'en ai trouvé une pour la verion 3 mais pas pour la 2, j'ai essayé de créer un projet FSharpMVC3 proposé en ligne dans la boîte de dialogue nouveau projet, pas moyen, type de projet non reconnu. Mais pour me dire ça, on me laisse d'abord le télécharger puis l'installer, et tenter l'ouverture. Je travaille sous C#, ce projet annonce être adapté à F# et C#.

    Même aventure avec EFMembershipTrial, je jurerais pourtant que je l'ai utilisé l'année dernière.

    Lorsque je parle de System.Data.Entity, l'explorateur d'objets me répond ceci :

    Contenu de l'explorateur d'objets pour Entity


    • Modifié Gloops samedi 8 mars 2014 11:07
    samedi 8 mars 2014 10:55

Réponses

Toutes les réponses

  • Bonjour,

    L'objet DbContext se trouve dans un assembly EntityFramework.

    Pour installer automatiquement cet assembly dans votre projet saisissez la commande NuGet suivante :

    Install-Package EntityFramework -Version 6.0.2 

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Proposé comme réponse Aurel Bera lundi 10 mars 2014 09:31
    samedi 8 mars 2014 17:00
    Modérateur
  • Ah, oui, j'ai lu trop vite ...

    Dans la doc j'ai vu espace de noms System.Data.Entity, alors quand j'ai trouvé une System.Data.Entity.dll, j'ai sauté à pieds joints. Pourtant, la ligne suivante de la doc dit Assembly : EntityFramework (in EntityFramework.dll), c'est sur ce dernier mot que j'aurais dû m'arrêter.

    Bon alors NuGet, ce que ça m'évoque, c'est la possibilité de télécharger des modules depuis la boîte de dialogue de création de projet. On peut aussi lui confier des lignes de commande ? Avec l'interface de lignes de commandes de Visual Studio ?

    Ah, ben oui, le point 4 là :

    Installing NuGet

    Ma première idée avait été de me tourner vers Web Platform Installer.


    • Modifié Gloops samedi 8 mars 2014 21:41
    samedi 8 mars 2014 20:54
  • Bonjour

    Dans le menu Outils de VS, NuGet Package Manager,  Package Manager Console (version VS en Anglais). 

    Ici vous devez executer Install-Package EntityFramework -Version 6.0.2

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 10 mars 2014 10:51
  • Bonjour,

    C'est valable sous Visual Web Developer Express, ça ? Dans le menu outils j'ai ça :

    Menu Outils de Visual Web Developer Express 2010

    Le gestionnaire d'extensions est une interface graphique, admettons que ce n'est pas bloquant, j'y cherche Entity Framework, en deux mots j'ai deux pages de résultats de recherche, si je le cherche en un mot il n'y a plus que deux résultats, EntityFramework Reverse POCO Generator, et Telerik Rad ListBox for ASP.Net Ajax. Si j'ajoute un 6 il n'y a plus personne.

    Dans les deux pages de résultats de recherche initiaux j'ai installé EF 6.0 EntityFramework Generator for C#, ce qui a donné lieu à l'affichage de cette page :

    http://msdn.microsoft.com/fr-FR/data/JJ613116

    Maintenant, je vais voir ce que je peux faire avec ça.

    lundi 10 mars 2014 12:20
  • Ah, euh ... mauvaise pioche. Dans la page mentionnée ci-dessus on lit ça :

    Visual Studio 2010
    
    The EF 6.x DbContextGenerator templates are not available for Visual Studio 2010 

    On dirait que j'aurais dû en choisir un autre ? Au demeurant on dirait que c'est un type de projet que j'ai téléchargé. A la limite ça n'empêche pas la référence voulue d'être installée, puis déclarée dans un projet d'un autre type ?

    • Modifié Gloops lundi 10 mars 2014 12:33
    lundi 10 mars 2014 12:32
  • Si je me rappelle bien, le nom c'est  ADO.NET Entity Framework.
    Essayez de chercher et installer donc " ADO.NET Entity Framework".

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 10 mars 2014 12:32
  • Aussi, vous utilisez VS Express avec un nouveau projet si j'ai bien compris. Pourquoi ne pas faire un upgrade de VS?

    Cordialement,

     



    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    lundi 10 mars 2014 12:35
  • OK. Pour désinstaller le précédent je pourrai voir après j'imagine.

    lundi 10 mars 2014 12:37
  • Ah oui passer à la version 2013 ? ça promet de pouvoir déraper, ça, non ?

    Il y a deux ans ou un peu moins j'ai passé plusieurs jours à essayer d'installer la version 2012, avant d'apprendre sur les TechDays que c'était normal que je n'y sois pas arrivé, car ce n'est pas possible sur Windows XP.

    (désolé, je me suis bagarré avec mon clavier, puis avec ma souris)


    • Marqué comme réponse Gloops lundi 10 mars 2014 12:38
    • Non marqué comme réponse Gloops lundi 10 mars 2014 12:38
    • Modifié Gloops lundi 10 mars 2014 12:40
    lundi 10 mars 2014 12:38
  • Oui, j'ai manqué ce petit détail!
    Mais un de ces jours vous devez oublier XP, car le support expire en 8 April 2014 donc pas des mises à jour de sécurité, et tout le reste.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 10 mars 2014 12:44
  • Oui, enfin le calendrier ça serait plutôt d'abord gagner des sous avec ce que j'ai, ensuite acheter une machine, puis potasser le système qu'il y a dessus, et après seulement on peut discuter du reste. Désolé d'être si terre-à-terre ...

    lundi 10 mars 2014 12:48
  • Si je me rappelle bien, le nom c'est  ADO.NET Entity Framework.
    Essayez de chercher et installer donc " ADO.NET Entity Framework".

    ça me donne dix résultats de recherche. Le mieux pour en fournir la liste c'est des copies d'écran ?

    lundi 10 mars 2014 12:55
  • Oui, une copie d'ecran!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 10 mars 2014 13:22
  • La doc de "EF 4.x EntityObject Generator for C#" se trouve là :

    http://visualstudiogallery.msdn.microsoft.com/e6db6554-345c-477a-9a73-3c5db06e9081?SRC=VSIDE

    et on y précise le support de Visual Studio 2010.

    C'est encourageant ?

    lundi 10 mars 2014 14:17
  • Oui. Le problème c'est que vous n'avez pas le bon paquet à installer et vous n'avez accès a la console NuGet.
    Dans le menu Outils\Options  onglet Package Manager vous avez l'option de supprimer le cache.
    Essayez de supprimer le cache. Essayez aussi de refaire les pas pour installer NuGet.
    http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
    Apres, il vous reste de exécuter la commande d’installation.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse Gloops lundi 10 mars 2014 17:47
    lundi 10 mars 2014 14:58
  • Ah, oui, effectivement, maintenant j'ai un sous-menu "Gestionnaire de package NuGet" en plus dans le menu Outils, avec dedans une console et une commande Options. Dans celle-ci le bouton "Effacer le cache du package" est grisé.

    J'étais parti du principe que ça faisait partie de Visual Web Developer, alors je ne l'avais jamais installé à part.

    Bon alors maintenant voyons voir cette ligne de commande ...

    lundi 10 mars 2014 16:00
  • Ah oui, on dirait qu'avec les bons outils ça marche tout de suite mieux :)

    Enfin pour le moment j'en suis à avoir obtenu le type DbContext. Juste une petite surprise à ce niveau : le module comporte using System.Data.Entity, donc je m'attendais à ce qu'en tapant un D pour dériver la classe MovieDbContext, ça me propose DbContext. En fait, non, il a fallu que je le préfixe, mais cette fois en tapant System.Data.Entity.D, là ça me le propose.

    J'ai eu une erreur de compilation parce qu'à la place de DbSet<Movie> j'avais mis MovieDbContext<Movie>, et bien sûr ça ne fait pas pareil.

    Bon, alors on dirait que ça y est, merci, Entity Framework est installé, et il ne me reste plus qu'à reprendre le fil.


    • Modifié Gloops lundi 10 mars 2014 17:46
    lundi 10 mars 2014 16:15
  • Bonjour,

    Une fois que j'ai un modèle dans l'application tel qu'indiqué là

    http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model

    et la chaîne de connexion correspondante dans le Web.config tel qu'indiqué plus bas sur la même page, tout étant sauvegardé, lorsque je génère l'application ça devrait aussi générer la base de données dans le répertoire App_Data, non ?

    mardi 11 mars 2014 12:34
  • Pas encore. DbContext va generer la DB pendant l'execution de votre logiciel.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 11 mars 2014 12:45
  • Ah, OK, donc si je comprends bien il faut d'abord mettre en œuvre la page suivante. Donc si j'attends de voir la base avant de passer à la page suivante, je risque d'attendre longtemps.

    Ah mais au fait voilà ce qui m'a fait poser la question : lorsque je veux créer un contrôleur, on me demande seulement son nom et si je veux ajouter des méthodes d'action. Le "tutorial" explique qu'il faut générer l'application, mais je l'ai fait ...

    Au fait, pour sortir un instant du sujet, il y a un petit "bug" qui m'intrigue : la première fois de chaque session que j'exécute un projet sous Visual Web Developer, un msgbox me dit objet non trouvé, et il s'avère qu'Internet Explorer a du mal à se charger complètement, je dois le fermer par tskill (avec les droits administrateur si je veux accéder à la base en authentification Windows).

    Ensuite, je relance l'exécution depuis Visual Web Developer, et il n'y a plus de souci.


    • Modifié Gloops mardi 11 mars 2014 13:14
    mardi 11 mars 2014 13:07
  • J'imagine que ce n'était pas très adapté de poser la question la plus embêtante après coup en modifiant la précédente ...

    Pour la création du contrôleur, la copie d'écran indique qu'on demande plein de paramètres dont la table concernée, or il m'est demandé seulement le nom du contrôleur et si je veux créer les méthodes des quatre actions courantes sur base de données.

    J'ai pourtant généré l'application avant comme il est indiqué.

    Donc je me dis que j'ai dû faire une erreur quelque part ...

    mardi 11 mars 2014 13:30
  • Peut-être la version de VS?

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse Gloops mardi 11 mars 2014 14:12
    • Non marqué comme réponse Gloops mardi 11 mars 2014 14:12
    mardi 11 mars 2014 13:53
  • Peut-être la version de VS?

    Ah, oui :)

    C'est vrai que j'ai dû adapter la syntaxe à plusieurs endroits ...

    Je vais essayer avec ça, c'est basé sur Visual Studio 2008, donc logiquement avec la version suivante ça devrait marcher :

    http://msdn.microsoft.com/fr-fr/asp.net/dd627541

    Merci.

    mardi 11 mars 2014 14:18
  • Finalement, le problème n'était pas la version de VS, mais la version de MVC. C'est vrai que lire un mode opératoire concernant MVC 4 pour l'appliquer en l'adaptant à MVC 2, c'est un système qui a ses limites.

    Dès que j'ai installé MVC3, je me suis vu proposer les types de projets correspondants, et là j'ai pu appliquer les instructions et obtenir le résultat du premier coup. Je ne m'attendais même pas à ce que ce soit aussi facile, aussi rapide et aussi efficace. J'ai encore à améliorer la mise en forme, mais de ce que je me rappelle la difficulté ne se trouve pas là. La suite c'est la lecture des notes de publication de MVC 4 et 5, pour savoir ce qu'il y a de nouveau dedans. Les tests unitaires dans VS Express il n'y a rien à faire, si je me rappelle bien ?

    Bon maintenant, comme je pourrais quand même bien un jour tomber sur un client qui utilise MVC 2, j'aimerais bien comprendre ce qui cloche. Donc là-dedans, on part non pas d'une classe, mais d'un modèle de données au format edmx. Quand j'ai demandé à obtenir la base de données, j'ai obtenu un fichier au format SQL, mais après il a fallu que je crée manuellement une base vide dans App_Data, que je ferme le projet, que j'ouvre SSMS pour y joindre la base que je venais de créer, que je lui affecte l'alias attendu dans le script SQL, et que j'exécute celui-ci. De retour dans le projet, ajouter un objet existant, et choisir la base de données.

    ça marche, mais ... la pub d'Entity Framework annonce mieux. Est-ce qu'il n'y aurait pas moyen, dans MVC 2, d'obtenir, certes pas la même chose que dans MVC 3 et 4, sinon ce n'était pas la peine de sortir de nouvelles versions, mais au moins quelque chose d'un peu moins laborieux ?
    mardi 11 mars 2014 21:06