Puis-je appeler une procédure stockée à partir d'un EntityDataSource?

asp.net entity-framework stored-procedures

Question

(ASP.net 3.5, C #, SQL Express 2008)

Je souhaite créer un formulaire Web dans lequel je peux rechercher "Solutions" (ma table) à l'aide d'un mot clé saisi par l'utilisateur, puis après le résultat et le remplissage d'un GridView.

J'ai déjà des parties de cette recherche via une procédure stockée connectée à mon modèle de données d'entité. Sur cette page, j'ai un EntityDataSource. Comment puis-je créer des données de ce type EntityDataSource à partir de ma procédure stockée?

Je réalise que je pourrais simplement extraire le résultat via le contexte Entity (ce qui fonctionne) et le lier à la grille, mais si je ne le relie pas à EntityDataSource, la pagination et le tri automatiques ne seront pas ma lutte dans le passé)

Réponse acceptée

Essayez d'utiliser la Function Import .

  1. Faites un clic droit sur le nom EntitySet (la partie en-tête)
  2. Choisissez Ajouter-> Importation de fonctions

Voici un bon article de blog à consulter. Outils ADO.NET Entity Framework: procédures stockées, par Guy Burstein

Mise à jour: Désolé, j'ai raté la partie sur EntityDataSource . Je ne connais donc aucune propriété exposée permettant d'accéder à une importation de fonction à partir de l'EDS, mais vous pouvez essayer d'utiliser la propriété CommandText.

<asp:EntityDataSource ID="SolutionsDataSource" runat="server" 
    CommandText="DataModel.SearchFunction(@Keywords)"
    ConnectionString="name=AdventureWorksEntities">
    <CommandParameters>
        <asp:ControlParameter Name="Keywords" 
            ControlID="SearchTextbox" Type="String"/>
    </CommandParameters>
</asp:EntityDataSource>

Mise à jour: Eh bien, il semble que j'ai de mauvaises nouvelles. Après avoir utilisé Reflector pour plonger profondément dans EntityDataSource . EntityDataSourceView est construit à l'aide de QueryBuilderUtils.ConstructQuery , qui à son tour appelle context.CreateQuery<T> . Ce dont vous auriez besoin pour exécuter la fonction import est un appel à context.ExecuteFunction<T> . Il ne semble pas y avoir de support pour ExecuteFunction dans cette version, les blogs que je lisais mentionnaient que cela était prévu, mais cela n’a pas été intégré à cette version, que ce soit dans les versions futures ou non. dis pas.

Cela dit, je recommanderais d'utiliser un ObjectDataSource , que vous pouvez construire de manière à prendre en charge la pagination, le tri, etc. Si vous ouvrez une question ObjectDataSource sur ce sujet, envoyez-moi un commentaire ici et je jetterai un coup d'oeil.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow