Posso chiamare una stored procedure da EntityDataSource?

asp.net entity-framework stored-procedures

Domanda

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

Voglio avere un Web Form, dove posso cercare "Soluzioni" (la mia tabella) usando una parola chiave inserita dall'utente e dopo che il risultato torna e popola un GridView.

Ho già parti di questa ricerca tramite una stored procedure collegata al mio Entity Data Model. In questa pagina ho un EntityDataSource. Come posso fare in modo che EntityDataSource acquisisca i dati dalla stored procedure?

Mi rendo conto che potrei semplicemente recuperare il risultato tramite il contesto Entity (che funziona) e collegarlo alla griglia, ma se non lo collego a EntityDataSource non otterrò il paging automatico e l'ordinamento (che è stato un altro lotta mia in passato)

Risposta accettata

Prova a usare la Function Import .

  1. Fare clic con il tasto destro sul nome EntitySet (la parte intestazione)
  2. Scegli Aggiungi-> Importa funzione

Ecco un buon post sul blog per il check-out. Strumenti ADO.NET Entity Framework: Stored Procedure, di Guy Burstein

Aggiornamento: Scusa se ho perso la parte relativa a EntityDataSource quindi non conosco alcuna proprietà esposta per accedere a una funzione import dall'EDS, ma puoi provare a utilizzare la proprietà 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>

Aggiornamento: Beh, sembra che abbia delle brutte notizie. Dopo aver usato Reflector per immergersi in profondità in EntityDataSource . EntityDataSourceView viene EntityDataSourceView utilizzando QueryBuilderUtils.ConstructQuery , che a sua volta chiama context.CreateQuery<T> . Quello che ti serve per eseguire la funzione di importazione è una chiamata al context.ExecuteFunction<T> . Non sembra esserci alcun supporto per l'ExecuteFunction in questa versione, i blog che stavo leggendo hanno detto che era stato pianificato, ma non è stato incluso in questa versione, sia che lo sia o meno nelle versioni future che posso dire.

Detto questo, consiglierei di usare un oggetto ObjectDataSource , che puoi costruire in un modo che supporti ancora il paging, l'ordinamento, ecc. Se apri una domanda ObjectDataSource su questo argomento mandami un commento qui e darò un'occhiata.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché