Reflète les modifications apportées à la procédure stockée dans le type complexe généré par Entity Framework
Donc j'ai une DB SQL Server que je suis de la connexion et de l'utilisation d'Entity Framework 4.1 pour générer mes classes POCO, qui fonctionne généralement assez bien. Il existe également des procédures stockées que je suis en utilisant la fonction "importer" pour créer récupérer la résultante de lignes de données à partir de l'appelant. Essentiellement, le processus que j'utilise est:
- Cliquez-droit sur le Modèle.edmx et choisissez la Fonction "Importer..."
- Choisir la procédure à partir de la liste déroulante
- Entrer dans mon choix de la Fonction d'Importation Nom
- Cliquez Sur "Obtenir Les Informations D'Une Colonne"
- Cliquez Sur "Créer Un Nouveau Type Complexe"
- Cliquez sur "OK"
et qui permettra de créer un POCO de classe pour l'ensemble de résultats de définition et je peux faire quelque chose comme:
var query = context.GetMyStuff().AsQueryable();
pour récupérer les résultats. Cela semble très bien fonctionner.
Maintenant, le problème que je vais avoir, c'est quand j'essaie de modifier une procédure stockée, puis obtenir les modifications se propagent à mon code. Par exemple, j'ai ajouté une colonne à une table, puis mise à jour de la procédure stockée pour retourner la colonne de données dans le cadre des résultats. Je ne vois pas comment faire pour que la mise à jour se propager dans la fonction d'importation des trucs, c'est à dire, obtenir l'généré POCO avoir une nouvelle propriété pour que l'ajout de la colonne.
Ce qui est de la perceuse pour faire cette mise à jour sur la procédure de réfléchir en C#? Je vais faire une nouvelle classe à chaque fois? N'était pas évident pour moi comment faire.
Informations Supplémentaires:
Quand j'ai essayé de "mettre à Jour" le type Complexe, comme suggéré dans la réponse donnée par Ladislav à cette questionje reçois un message d'erreur "Vérifier que le FunctionImport nom est unique."
Si j'essaie ce que E. J. Brennan suggère ci-dessous, je reçois le même message d'erreur.
Ce ne de travail, au moins pour moi, est d'ouvrir le Modèle.fichier edmx dans Notepad++, trouver le FunctionImport ligne et de le supprimer puis de le régénérer. Ce n'est pas idéal, mais cela a fonctionné.
source d'informationauteur itsmatt
Vous devez vous connecter pour publier un commentaire.
(Cette solution est pour EF 6. Je n'ai pas essayé dans d'autres EF versions. Il fonctionne de nice.) Je suis de soutien Brennan réponse en illustrant un exemple pour le rendre plus clair pour les naïfs programmeurs comme moi: -)
Aller à l'explorateur de modèles.
MyStoreProc est le nom de la procédure stockée (par exemple). MyStoreProc apparaîtra dans 3 endroits.
Procdures/Fonctions -> MyStoreProc
Supprimer tous les trois à partir du modèle.
Enregistrer l'edmx (en cliquant dans la fenêtre, puis ctrl+S). Puis faites un clic droit et cliquez sur mettre à jour le modèle de base de données. Ajoutez ensuite la procédure stockée mis à jour et Sauvegarder à nouveau.
Résolu sans aucun tracas 🙂
J'ai l'habitude d'aller dans l'explorateur de modèle, Dans le menu principal, sélectionnez Affichage > Autres Windows > Modèle de Données d'Entité Navigateur (il s'ouvre en général dans le même panneau que l'explorateur de solutions), et de supprimer la procédure stockée qui a changé, et re-l'ajouter dans.
Il peut être plus facile, mais cela fonctionne pour moi.
Edit: "modèle de mise à Jour de la base de données", théoriquement, devrait également fonctionner, mais dans mon expérience, il ne fonctionne pas 100% du temps, la suppression et re-ajout d'semble solide comme le roc.
Au sein de notre entreprise, nous avons utilisé pour mettre à jour le SP est comme SArifin réponse...qui fonctionne, mais est une sorte de traînée.
Récemment, nous avons constaté que vous n'avez qu'à aller pour que le SP de la Fonction d'Importation -> Clic Droit -> Edit> mise à Jour de type complexe.
@itsmatt - votre solution a fonctionné pour moi. En bref,
J'ai juste été confronté à ce même problème et je vous remercie pour votre réponse! Une chose que j'avais à faire était de supprimer la sortie de la "Complexes" dans l'explorateur de modèles.