J'utilise .NET 3.5 SP1, VS 2008 avec le framework d'entité. J'ai initialement ajouté une procédure stockée à mon modèle qui prenait 2 paramètres. Plus tard, j'ai changé le sproc pour ne prendre que 1 paramètre. J'ai couru le Update Model From Database
option de menu et a confirmé que mon sproc était répertorié dans l'onglet Refresh
. Vous avez terminé l'assistant, nettoyé et reconstruit la solution et le modèle n'a jamais changé la signature du sproc.
Pourquoi n'est-il pas mis à jour? Le modèle de mise à jour à partir de la base de données est-il cassé? Suis-je en train de manquer quelque chose? Merci.
J'ai vu deux problèmes avec la mise à jour d'une procédure stockée après l'avoir ajoutée au cadre d'entité:
Mise à jour du modèle EDMX (importation de fonction)
Mise à jour du type complexe de procédure stockée
ouvrez la fenêtre "Model Browser" pendant que le fichier .edmx est ouvert.
Développez les nœuds ContentModel, EntityContainer: ..., puis Function Imports. Recherchez l'importation de fonction pour votre procédure stockée et double-cliquez. La même fenêtre que vous avez utilisée pour le créer s'ouvrira, mais maintenant remplie avec ses données.
Cliquez sur le bouton Get Column Information (regardez la grille sous le bouton pour voir ce qui sera modifié).
Cliquez sur le bouton Mettre à jour à côté du bouton radio "Complexe".
Cliquez sur OK , et le type complexe de votre jeu de résultats devrait être mis à jour.
Vous n'avez pas à modifier le edmx/xml. FAITES CECI:
Lorsque vous importez une procédure stockée dans l'EDMX (je parle d'une procédure qui renvoie un jeu de résultats, mais ce sera un processus similaire), 3, et non 1, des éléments sont créés, et c'est la source du problème. (*** la deuxième source du problème est que vous devez explicitement enregistrer après avoir supprimé des objets, avant de réimporter des objets, sinon les objets nouvellement réimportés entreront en conflit avec ce qui n'a pas été vraiment supprimé (en enregistrant) de l'edmx.
DONC! Faites ceci:
Dans Model Browser, généralement à gauche, collez le nom de votre procédure stockée dans la zone de recherche, cliquez sur Entrée (ou sur Recherche). Il atterrira sur la première instance - probablement la procédure stockée elle-même. Faites un clic droit et supprimez. Maintenant, remettez le curseur dans la zone de recherche -> appuyez sur Entrée ou effectuez une nouvelle recherche. Vous allez maintenant atterrir sur la fonction d'importation. Faites un clic droit et supprimez. Faites la même chose une troisième fois - cela atterrira sur le type complexe représentant l'ensemble de résultats. Supprime-le. Maintenant, vous avez terminé PAS !!!!!. Vous devez enregistrer ce que vous venez de faire, afin que les suppressions soient écrites (non écrites) dans l'edmx.
Maintenant, allez récupérer la procédure stockée à nouveau (modèle mis à jour/sélectionnez le proc stocké). MAINTENANT, CLIQUEZ SUR ENREGISTRER.
Cela fonctionnera à chaque fois. La clé est de s'assurer que lorsque vous utilisez le navigateur de modèle pour rechercher TOUTES les instances du nom de procédure stockée apparaissant dans le navigateur de modèle, et pour cette raison, il est préférable de ne pas s'embêter avec les conventions de dénomination par défaut. La deuxième clé consiste à ENREGISTRER après avoir terminé une étape.
Si vous devez modifier les types de données des colonnes dans l'ensemble de résultats -> au début du processus de stockage, ajoutez désactivez fmtonly
Utilisez ensuite Model Browser -> Function Import -> Edit Your Proc -> Get Column Information button -> Update button
C'est ainsi que Neil le fait :)
si vous changez la signature du proc stocké, vous devrez mettre à jour tout type complexe créé dans le modèle via l'importation de fonction.
Il a fallu beaucoup d'édition manuelle sur le XML et quelques redémarrages de Visual Studio mais j'ai finalement réussi à faire oublier à VS la signature précédente. Ensuite, j'ai simplement utilisé l'assistant EF normal pour l'ajouter à nouveau et cela a très bien fonctionné.
Vous pouvez également effacer toutes les preuves du SP dans les endroits suivants, ces fichiers peuvent être trouvés dans le navigateur de modèles lorsque vous ouvrez le fichier .edmx:
Après l'avoir supprimé, vous pouvez l'ajouter sans problème.
Eu un problème similaire dans EF4 où il n'y a pas d'option pour actualiser les sps individuels, il est censé le faire lorsque vous cliquez sur Actualiser dans l'assistant de mise à jour, mais cela ne fonctionne pas de manière fiable. Je devais dans le navigateur de modèles supprimer les types complexes pour les valeurs de retour, ainsi que l'importation de fonction. Ensuite, allez dans le fichier edmx avec l'éditeur XML et supprimez la référence au proc stocké (impossible de trouver un moyen de le faire dans le navigateur de modèle). Ensuite, ajoutez à nouveau les sps.
Vous devez supprimer et ajouter des procédures stockées car le cadre d'entité doit générer une nouvelle définition pour votre procédure. Je suppose que vous devez refaire l'importation de la fonction.
Fondamentalement, si vous aviez changé la logique de la procédure et non le type de retour ou la signature, vous n'avez pas besoin de l'ajouter à nouveau. Cela fonctionnera bien, mais si vous modifiez le type de retour ou la signature, ef doit le générer et le mapper vers une nouvelle définition qui fonctionne comme cela.