Je sois caresses mes genoux sur l'embouteillage d'entité 4 et dans un léger problème.
J'ai des procédures stockées que je tire dans mon EDMX. Lorsque je crée des types complexes de ces Procs, EF n'a aucun problème à obtenir les informations sur la colonne. Sauf au même endroit. Après avoir été perplexe pendant un moment, je suppose que c'était ma table temporaire d'être renseignée qui causait le problème. En fait, cela appelle simplement l'insert dans la table TEMP qui cause le problème. Je ne le remplissais pas réellement avec aucune information. P>
Bien que je sache que je peux créer manuellement un type complexe puis cartographier la fonction à ce type, je voudrais pouvoir simplement laisser EF prendre soin de Pour moi. Est-ce que quelqu'un sait ce que je fais mal? P>
ci-dessous est un exemple de procéder qui ne fonctionne pas. Exécutez ceci dans une base de données et ajoutez le PROC à vous EDMX. Ensuite, essayez d'obtenir les informations sur la colonne dans l'écran "Ajouter une importation de la fonction". Rien n'est retourné. Commencez l'insertion à la table TEMP et obtenez les informations sur la colonne et fonctionnent. p>
merci,
Steve p>
3 Réponses :
Quelques choses à essayer.
Essayez d'utiliser le Proc stocké suivant (non testé .. Juste penser à voix haute ...) p> Essayez et voyez si l'assistant se rafraîchit, maintenant . p> - p> ok .. Lorsque le concepteur / sorcier EF ne comporte pas exactement ce que mon procédé stocké est Supposons être de retourner, je fais habituellement ce qui suit: - p> par exemple .. p> maintenant ...
3. Ajoutez un faux retour forcé dans le processus stocké, qui (plus ou moins) juste définit em> la structure / champ de sortie. P> par exemple .. p> tentative n ° 2 :) h3>
/ * / * code> Commentaire tout em> après la définition de la procédure. LI>
ol> ALTER PROCEDURE dbo.Foo
(
Bar1 INT,
Bar2 TINYINT,
... // whatever u have as your optional input arguments //
)
AS
SET NOCOUNT ON
SELECT 1 AS Id, 1 AS UserId, 1 AS SomeOtherId,
CAST('AAA' AS NVARCHAR(350)) AS Name,
-- etc etc etc..
/*
.... every thing in here is commented out
*/
GO
Merci pur. Nous devions utiliser les tables Temps en raison d'une SQL dynamique qui suit l'insert. L'exemple que j'ai donné était une version enlevée qui affiche toujours le problème. Les variables de table ne sont donc pas une option. J'apprécie cependant la réponse.
J'ai couru aussi dans ça. Bien mieux que de ces 2 suggestions, ce qui vous oblige à briser efficacement votre SPROC pour mettre à jour le modèle ou utiliser des variables de table sous-performantes (au moins dans mon cas), créez simplement un contrat de données explicite en haut de votre définition SPRO. Cela n'évaluera jamais, comme expliqué ici Stackoverflow.com/a/16594665/237723
Option 1, Changement "Créer une table #Temp_table" sur "Déclarer @temp_table {...}" a travaillé pour moi
Voici une variation de la réponse excellente de Pure.Krome. Plutôt que de commenter votre code SPROC, créez une nouvelle vue qui consiste uniquement à uniquement la "fausse" instruction SELECT décrite par PURE. La vue sera utilisée pour créer une entité. L'entité d'affichage devient alors le conteneur pour les résultats de la procédure stockée.
MyProject.MyEntities myContext = new MyProject.MyEntities(); var myQuery = myContext.usp_FOO(myRecordID); FooWrapperViewEntity myFooEntity = new FooWrapperViewEntity(); myFooEntity = myQuery.FirstOrDefault();
J'ai couru aussi dans ça. Et encore mieux que de l'envelopper dans une vue, mettez simplement un contrat de données dans le haut de la SPROC à l'intérieur d'une condition qui n'évaluera jamais vrai, comme prévu ici: Stackoverflow.com/a/16594665/237723
Au début, vous devez créer une procédure de magasin normale sans utiliser la table TEMP. Cette procédure de magasin contiendra tout le nom de la colonne (table normale + Table Table). Maintenant, vous pourrez créer le type complexe dans votre EDMX P>
Ajouter ensemble Fmtonly sur votre sp. Stackoverflow.com/Questtions/3583933/...