Могу ли я вызвать хранимую процедуру из EntityDataSource?

asp.net entity-framework stored-procedures

Вопрос

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

Я хочу иметь веб-форму, где я могу искать «Решения» (моя таблица) по ключевому слову, введенному пользователем, и после того, как результат возвращается и заполняет GridView.

У меня уже есть части этого поиска через хранимую процедуру, которая подключена к моей модели данных сущностей. На этой странице у меня есть EntityDataSource. Как я могу сделать этот EntityDataSource захватить данные из моей хранимой процедуры?

Я понимаю, что мог бы просто получить результат через контекст Entity (который работает) и связать его с сеткой, но если я не подключу его к EntityDataSource, я не получу автоматическое разбиение на страницы и сортировку (что было другим борьба моя в прошлом)

Принятый ответ

Попробуйте использовать Function Import .

  1. Щелкните правой кнопкой мыши по названию EntitySet (заголовок)
  2. Выберите Добавить-> Импорт функций

Вот хороший пост в блоге для вас, чтобы проверить. Инструменты ADO.NET Entity Framework: хранимые процедуры, автор Гай Бурштейн

Обновление: Извините, я пропустил часть о EntityDataSource поэтому я не знаю ни одного свойства, доступного для доступа к импорту функции из EDS, но вы можете попробовать использовать свойство 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>

Обновление: Ну, похоже, у меня плохие новости. После использования Reflector углубиться в EntityDataSource . EntityDataSourceView с использованием QueryBuilderUtils.ConstructQuery , который, в свою очередь, вызывает context.CreateQuery<T> . Для выполнения импорта функции вам потребуется вызов context.ExecuteFunction<T> . Кажется, в этом выпуске не было никакой поддержки для ExecuteFunction, в блогах, которые я читал, упоминалось, что это было запланировано, но в этот выпуск это не вошло, будет ли это в будущих выпусках. не говори.

При этом я бы порекомендовал использовать ObjectDataSource , который вы можете создать так, чтобы он все еще поддерживал разбиение на страницы, сортировку и т. Д. Если вы откроете вопрос ObjectDataSource по этой теме, пришлите мне комментарий, и я посмотрю.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow