Actualiser une procédure stockée dans l’entité Framework 3.5

J’utilise .NET 3.5 SP1, VS 2008 avec le framework d’entités. J’ai initialement ajouté une procédure stockée à mon modèle qui prenait 2 parameters. Plus tard, j’ai changé le sproc pour prendre juste 1 paramètre. J’ai exécuté l’option de menu Update Model From Database et confirmé que mon sproc était répertorié dans l’onglet Refresh . Terminé l’assistant, nettoyé et reconstruit la solution et le modèle n’a jamais changé la signature du sproc.

Pourquoi n’est-ce pas la mise à jour? Le modèle de mise à jour de la fonctionnalité de firebase database est-il cassé? Est-ce que je manque 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 à la structure d’entité:

  • La fonction d’importation créée pour appeler le SPROC n’a pas été mise à jour (parameters incorrects et obsolètes)
  • Le type complexe créé pour le jeu de résultats du SPROC n’a pas été mis à jour (champs incorrects et obsolètes)

Mise à jour du modèle EDMX (importation de la fonction)

  1. Ouvrez le fichier .edmx (dans le concepteur de l’interface graphique).
  2. Faites un clic droit dans un espace ouvert et sélectionnez “Mettre à jour le modèle à partir de la firebase database”.
  3. Cliquez sur Terminer (si possible) dans la fenêtre contextuelle. La signature de votre SPROC doit être mise à jour (avec toute importation de fonction).

Mise à jour du type complexe de procédure stockée

  1. Ouvrez la fenêtre ” Model Browser ” pendant que vous ouvrez le fichier .edmx.

  2. Développez le ContentModel , EntityContainer: … , puis les nœuds Function Imports . Recherchez l’importation de la fonction pour votre procédure stockée et double-cliquez dessus. La même fenêtre que vous avez utilisée pour la créer s’ouvrira, mais elle est maintenant remplie avec ses données.

  3. Cliquez sur le bouton Obtenir des informations sur la colonne (regardez la grid sous le bouton pour voir ce qui sera modifié).

  4. Cliquez sur le bouton Mettre à jour à côté du choix du bouton radio “Complex”.

  5. Cliquez sur OK et le type complexe de votre jeu de résultats doit être mis à jour.

Vous n’avez pas besoin d’éditer le fichier edmx / xml. FAITES CE:

Lorsque vous apportez une procédure stockée dans l’EDMX (je parle de celle qui renvoie un ensemble de résultats, mais que cela va être un processus similaire), 3, pas 1, é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 objects, avant de réimporter des objects, sinon les objects nouvellement ré-importés se heurteront à ce qui n’a pas été réellement supprimé (en le sauvegardant) depuis edmx).

ALORS! Faites ceci:

Dans le navigateur de modèles, généralement à gauche, collez le nom de votre procédure stockée dans la zone de recherche, cliquez sur entrer (ou rechercher). Il va atterrir sur la première instance – probablement la procédure stockée elle-même. Clic droit et supprimer. Maintenant, placez le curseur dans la boîte de recherche -> appuyez sur Entrée ou effectuez une nouvelle recherche. Vous allez maintenant atterrir sur la fonction import. Clic droit et supprimer. Faites la même chose une troisième fois – cela arrivera sur le type complexe représentant le jeu de résultats. Supprime-le. Maintenant, vous avez terminé NON !!!!! Vous devez sauvegarder ce que vous venez de faire pour que les suppressions soient écrites (non écrites) dans edmx.

Maintenant, allez à nouveau récupérer la procédure stockée (modèle mis à jour / sélectionnez le processus stocké). CLIQUEZ SUR MAINTENANT

Cela fonctionnera à chaque fois. La clé est de vous assurer que lorsque vous utilisez le navigateur de modèle pour rechercher TOUTES les instances du nom de la procédure stockée apparaissant dans le navigateur de modèle, il est préférable de ne pas contourner les conventions de dénomination par défaut. La deuxième clé est d’économiser après avoir terminé n’importe quelle étape.

Si vous avez besoin de changer les types de données des colonnes du jeu de résultats -> au début du stor proc, ajoutez simplement fmtonly off

Ensuite, utilisez le navigateur de modèles -> Importation de fonctions -> Modifier votre Proc -> bouton Obtenir des informations sur la colonne -> bouton Mettre à jour

Voici comment Neil le fait 🙂

Il a fallu beaucoup d’édition manuelle sur XML et quelques redémarrages de Visual Studio, mais j’ai finalement pu faire en sorte que VS oublie la signature précédente. Ensuite, j’ai simplement utilisé l’assistant EF normal pour l’append et cela a fonctionné très bien.

Si vous modifiez la signature de la procédure stockée, vous devrez mettre à jour tout type complexe créé dans le modèle via l’importation de la fonction.

Vous devez supprimer et append des procédures stockées lorsque la structure 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.

En gros, si vous avez changé la logique de la procédure et non le type de retour ou la signature, vous n’avez pas besoin de l’append à nouveau. Cela fonctionnera bien, mais si vous modifiez le type ou la signature de retour, ef doit générer et associer une nouvelle définition correspondant à son fonctionnement.

Vous avez rencontré un problème similaire dans EF4, où il n’ya pas d’option pour actualiser les sps individuels, c’est fait pour le faire lorsque vous cliquez sur Actualiser dans l’assistant de mise à jour, mais cela ne fonctionne pas de manière fiable. J’ai dû dans le navigateur de modèle supprimer les types complexes pour les valeurs de retour, ainsi que l’importation de la 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, rajoutez les sps.

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:

  • YourModel> Types complexes;
  • YourModel> Importations de fonctions;
  • YourModel.Store> Procédures / Fonctions stockées.

Après l’avoir effacé, vous pouvez l’append sans problème.